jQuery Скрыть / Показать со слайдом при наведении ... лучший способ сделать это? - PullRequest
5 голосов
/ 09 июля 2009

В основном возникли проблемы с использованием Hover, чтобы скрыть или показать элемент.

Идея проста, при наведении показа div. Когда больше не паришь, спрячь это. Проблема в том, что если курсор мыши находится над элементом div и уходит слишком быстро, элемент show / hide будет оставаться видимым Я надеюсь, что это легко исправить, и это не типичная проблема с событием hover.

 jQuery
 (
   function() 
   {
     jQuery(".slideDiv").hide();

     jQuery(".mainDiv").hover
     (
       function() 
       {
         var children = jQuery(this).children(".slideDiv");

         if (children.is(":hidden")) 
         {
           children.show("slide", { direction: "left" }, 100);
         }
       },
       function() 
       {
          var children = jQuery(this).children(".slideDiv");
          children.hide("slide", { direction: "left" }, 100);
       }
     );
   }
 );

Стили выглядят так:

 .mainDiv
 {
   margin:5px;
   height:200px;
 }

 .slideDiv
 {
   background-color:Teal;
   float:left;
   height:200px;
   position:absolute;
   z-index:100;
 }

И разметка

    <div class="mainDiv">
        <div class="showDiv">
            Hover me
        </div>
        <div class="slideDiv">
            Do you see me?
        </div>
    </div>
    <div class="clear"></div>
    <div class="mainDiv">
        <div class="showDiv">
            Hover me too
        </div>
        <div class="slideDiv">
            Do you see me now?
        </div>
    </div>

Ответы [ 2 ]

13 голосов
/ 09 июля 2009

Используйте плагин hoverIntent . Это позволяет избежать отображения чего-либо, если пользователь просто наводит указатель мыши на элементы, и избегает неприглядной цепочки анимаций.

6 голосов
/ 29 июля 2009

Я попробовал ваш скрипт, и он сделал, как вы описали. Я попытался удалить children.is (": hidden") из вашего скрипта, но проблема все еще возникла.

Когда я переписываю скрипт, div никогда не остается видимым. Итак, похоже, что проблема заключается в использовании jQuery children вместо find для получения объекта:

Все еще есть проблемы:

 jQuery (
   function(){
     jQuery(".slideDiv").hide();
     jQuery(".mainDiv").hover (
       function() {
         $(this).children(".slideDiv").show("slide", { direction: "left" }, 100);
       },function(){
         $(this).children(".slideDiv").hide("slide", { direction: "left" }, 100);
       }
     );
   }
 );

Работает по назначению:

 $(document).ready(function(){
   $('.slideDiv').hide();
   $('.mainDiv').hover(
     function(){
       $(this).find('.slideDiv').show('slide', { direction: 'left' }, 100)
     },
     function(){
       $(this).find('.slideDiv').hide('slide', { direction: 'left' }, 100)
     }
   )
 })

И да, плагин hoverIntent хорош: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...