У меня есть чрезвычайно простая анимационная программа jQuery, которая будет влиять на видимость некоторых вкладок, уложенных поверх друг друга. В функциональности нет никаких жалоб, но структура моего кода ужасающая. Мои коды повторяют одну и ту же функцию снова и снова, но я не могу написать функцию, которая может выполнять задачу совершенно одинаково. Я хочу включить низкую степень инкапсуляции, если это возможно, потому что я хотел бы иметь возможность использовать это в примере. Ниже приведен код.Нужна лучшая структура в скрипте jQuery
$(window).scroll(function(){
if($(window).scrollTop()>450){
last.slideDown(700, function(){
third.slideDown(700, function(){
second.slideDown(700, function(){
first.slideDown(700);
})})})
}
else{
bars.slideUp(1000);
}
});
first.mouseenter(function(){ //when first elements hovered over
second.animate({opacity : ".4"},{ duration:500, queue:false});
third.animate({opacity : ".4"},{ duration:500, queue:false});
last.animate({opacity : ".4"},{ duration:500, queue:false});
first.mouseleave(function(){
second.animate({opacity : "1"},{duartion:50, queue:false});
third.animate({opacity : "1"},{duartion:50, queue:false});
last.animate({opacity : "1"},{duartion:50, queue:false});
})
})
second.mouseenter(function(){ //when second elements hovered over
second.css("z-index", "5");
first.animate({opacity : ".4"},{ duration:500, queue:false});
third.animate({opacity : ".4"},{ duration:500, queue:false});
last.animate({opacity : ".4"},{ duration:500, queue:false});
second.mouseleave(function(){
second.css("z-index", "3");
first.animate({opacity : "1"},{duartion:50, queue:false});
third.animate({opacity : "1"},{duartion:50, queue:false});
last.animate({opacity : "1"},{duartion:50, queue:false});
})
})
third.mouseenter(function(){ //second element hover
third.css("z-index", "4");
first.animate({opacity : ".4"},{ duration:500, queue:false});
second.animate({opacity : ".4"},{ duration:500, queue:false});
last.animate({opacity : ".4"},{ duration:500, queue:false});
third.mouseleave(function(){ //third element hover
third.css("z-index", "2");
first.animate({opacity : "1"},{duartion:50, queue:false});
second.animate({opacity : "1"},{duartion:50, queue:false});
last.animate({opacity : "1"},{duartion:50, queue:false});
})
})
last.mouseenter(function(){ //last element hover
last.css("z-index", "4");
first.animate({opacity : ".4"},{ duration:500, queue:false});
third.animate({opacity : ".4"},{ duration:500, queue:false});
second.animate({opacity : ".4"},{ duration:500, queue:false});
last.mouseleave(function(){
last.css("z-index", "1");
first.animate({opacity : "1"},{duartion:50, queue:false});
third.animate({opacity : "1"},{duartion:50, queue:false});
second.animate({opacity : "1"},{duartion:50, queue:false});
})
})
});
Почему вы привязываете обработчики 'mouseleave' от * внутри * вашего обработчика mouseenter? Если пользователь несколько раз перемещает указатель мыши, вы получите несколько обработчиков «mouseleave» на одном элементе. (Кроме того, этот вопрос может быть лучше размещен на http://codereview.stackexchange.com/.) – nnnnnn
, пока скрипт выполняется, когда пользователь навешивается поверх него. Мне нужно, чтобы он все еще слушал, когда пользователь прокручивается из него , Если вы можете предоставить другой метод id, с радостью его использовать. –
Просто объявите обработчики 'mouseleave' * вне * обработчиков mouseenter. – nnnnnn