2013-12-06 6 views
0

В моей вертикальной навигации я хочу выделить элемент списка, который последний раз щелкнул и в данный момент активен. Выделение выполняется с назначением красного фона для элемента списка. Я также хочу выделить элемент списка при наведении мыши. Проблема заключается в зависании с другими элементами списка, я хочу временно удалить класс из активного элемента списка, а когда указатель мыши больше не включен в элемент неактивного списка, этот активный класс снова будет включен в активный элемент списка. Вот как это выглядит на JSFiddle: http://jsfiddle.net/9r3tx/2/Эффекты наведения на элемент списка

Это функция JQuery, которая присваивает класс активный в список элемент, который щелкнул:

//Add class active on click, firts li is active by default 
$('.navigation li:first').addClass('active'); 

$(".navigation li a").click(function(e) { 
    $('.navigation li').removeClass('active'); 
    $(this).parent().addClass('active'); 
}); 

Здесь проблема заключается в:

//Change classes on hover 
$(document).ready(function(e) { 
$(".navigation li a").hover(function(e){ 
    $('.navigation li').removeClass('active'); 
    $(this).parent().addClass('active'); 
}); 
}); 

I знайте, что это назначает класс активным для зависающей ссылки и остается таким, но я хочу временно назначить класс active, который будет длиться только в течение времени, когда указатель находится над этим списком.

+0

Почему вы не просто использовать CSS для состояния парения? '.navigation li: hover a {}' – brouxhaha

+0

Если пользователь хочет jquery, и только javascript и jquery были выбраны пользователем, используйте mouseleave. См. Мой ответ с рабочей демонстрацией – Aaron

ответ

1

Мое предложение было бы использовать CSS совместно с JQuery:

$('.navigation li:first').addClass('active'); 

$('.navigation li').click(function(){ 
    $(this).addClass('active').siblings('.active').removeClass('active'); 
}); 

С помощью CSS:

JS Fiddle demo.

+0

отлично работает :) tnx ... –

+0

Это действительно странное поведение UX .. для чего это? – Aaron

0

Как насчет THIS простого примера, который делает именно то, что вы просите, используя mouseleave

//Add class active on click, firts li is active by default 
    $('.navigation li:first').addClass('active'); 

    $(".navigation li a").click(function(e) { 
     $('.navigation li').removeClass('active'); 
     $(this).parent().addClass('active'); 
    }); 

//Change classes on hover 
$(document).ready(function(e) { 
    $(".navigation li a").hover(function(e){ 
     $('.navigation li').removeClass('active'); 
     $(this).parent().addClass('active'); 
    }); 

    $(".navigation li a").on('mouseleave', function(e){ // this function for removing 
     $(this).parent().removeClass('active'); 
    }); 
}); 
+0

, но когда мышь оставляет li, ни один из элементов списка не обладает активным классом ... зависание выполняется нормально, но я хочу, чтобы ранее щелкнутая ссылка подсвечивалась, когда мышь уходит из ... –

+0

OK проверьте новую демонстрационную версию. Именно то, что вы попросили использовать дополнительный класс CSS – Aaron

+1

Или вы могли бы просто передать вторую функцию (для mouseleave), чтобы навести курсор вместо добавления дополнительного отдельного события. – brouxhaha

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