我想在当前li
元素下滑动所有li
元素和slideDown ul
元素
$(document).ready(function(){
$("li").slideUp();
});
$(".nav").hover(function(e){
$(this).children("li").slideDown();
$("li").slideUp();
e.stopPropogation();
});
this是小提琴
问题是它最终是否会向上滑动 我做错了什么?
答案 0 :(得分:3)
您需要定位除当前之外的所有其他导航的LI
,因此请使用not
:
e.g。
$(".nav").hover(function (e) {
$(this).children("li").slideDown();
$(".nav").not(this).find("li").slideUp();
e.stopPropogation();
});
JSDFiddle: http://jsfiddle.net/TrueBlueAussie/kcGZJ/46/
当你遇到重叠动作的问题时,通常的"修复"是停止先前的动画,因此它们至少不会链接并运行完成:
$(".nav").hover(function (e) {
$(this).children("li").stop(true,true).slideDown();
$(".nav").not(this).find("li").stop(true,true).slideUp();
e.stopPropogation();
});
答案 1 :(得分:3)
您可以将hover()
事件挂钩分为两个电话,一个用于mouseenter
,另一个用于mouseleave
。在mouseenter
,您要slideDown()
当前li
中的ul
。在mouseleave
中,您希望将它们全部slideUp()
。试试这个:
$(".nav").hover(function () {
$(this).children("li").slideDown();
}, function() {
$("li").slideUp();
});
答案 2 :(得分:0)
根据您的代码$(this).children("li").slideDown();
,所有li都会向下滑动。并且,$("li").slideUp();
将使所有的li滑动!!
请做
$(".nav").hover(function (e) {
$(".nav").not(this).find("li").slideUp();
$(this).children("li").slideDown();
e.stopPropogation();
});
答案 3 :(得分:0)
我添加了一个类来修复此问题
$(document).ready(function(){
$("li").slideUp();
});
$(".nav").hover(function(e){
$("li").removeClass();
$(this).children("li").addClass("current").slideDown();
$("li:not(.current)").slideUp();
e.stopPropogation();
});