2013-11-02 3 views
8

У меня есть проблема с этим JQuery код:JQuery цикл парения

$(".item").mouseenter(function(){ 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
}).mouseleave(function(){ 
    $(this).stop(); 
    $(this).addClass("item"); 
    $(this).removeClass("active"); 
    $(".item").show(700); 
}); 

и это мой HTML:

<ul> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
</ul> 

Я хочу, чтобы, когда я зависать на одном пункте, другие предметы будут скрывать, код работает нормально, но проблема в том, что если я навещу еще один элемент во время скрытия (700 мс), он сделает цикл скрыть/показать элементы. что я могу сделать для предотвращения этого.

jsFiddle

Примечание: Я хочу, чтобы парил пункт идет налево, не остаются неподвижными.

+0

плохая концепция UI просто потому, что вы не можете избежать зависаний другого из-за поплавки. Когда они оживляют, они сдвигают позиции. Для вас работает рекламная непрозрачность? – charlietfl

ответ

3

Вы использовали float: left к li элементов .. поэтому ul было нет ширины и высоты. Примените этот CSS:

ul { 
    overflow: auto; 
} 

, а также я сделал некоторые изменения в JQuery:

$(".item").on('mouseenter', mEnter) 
$('ul').on('mouseleave', function() { 
    $('.item').stop(); 
    $('.active').removeClass("active") 
     .addClass("item"); 
    $(".item").show(700); 
}); 

function mEnter() { 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
} 

вы претендуете mouseleave события для человека колебалось LI элемента вместо родительского элемента т.е. UL.

Working Fiddle

+0

Красиво сделано ... это, похоже, работает так же, как OP намеревается. – Charlie74

+0

btw, нет необходимости обертывания в функции. Я просто сделал это во время тестирования. –

+0

отлично и спасибо приятелю ... –

 Смежные вопросы

  • Нет связанных вопросов^_^