JQuery - Mouseleave 不工作
JQuery - Mouseleave not working
我在这里重复了我的问题 - jsfiddle。
在鼠标离开时,反向动画效果就消失了。
我认为这与"display" 属性有关,但我不确定如何解决这个问题。我想发生这种情况的原因是悬停时 "display:block",但随后又恢复为 display:none?
如果我随后在子菜单元素上强制 "display:block",它会立即显示所有子菜单选项。
HTML
<nav>
<ul class="level-2">
<li class="has-child"> <a href="/clients/">Clients</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/clients/test1/">Test1</a> </li>
</ul>
</li>
<li class="has-child"> <a href="/services/">Services</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/services/test2/">Test2</a> </li>
</ul>
</li>
</ul>
</nav>
JQuery
$(document).ready(function () {
$('.level-2 li').on({
mouseenter: function () {
$('.submenu').stop().animate({ 'margin-left':"300px" }, 1000);
},
mouseleave: function () {
$('.submenu').stop().animate({ 'margin-left':"-200px" }, 1000);
}
});
});
问题是 display: none
分配给 .submenu
规则,所以只要您将光标移出元素,display
就会设置为 none
将从渲染中删除该项目。
$(document).ready(function() {
$('.level-2 > li').on({
mouseenter: function() {
$('.submenu', this).stop().removeClass('hidden').animate({
'margin-left': "300px"
}, 1000);
},
mouseleave: function() {
$('.submenu', this).stop().animate({
'margin-left': "-200px"
}, 1000);
}
});
});
nav ul li a {
list-style: none;
color: #cccccc;
}
.hidden {
display: none;
}
.submenu {
position: fixed;
left: -120px;
top: 0;
width: 200px;
height: 100%;
background: #3a4247 none repeat scroll 0 0;
z-index: -1;
filter: alpha(opacity=80);
-moz-opacity: 0.8;
-khtml-opacity: 0.8;
opacity: 0.8;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<nav>
<ul class="level-2">
<li class="has-child"> <a href="/clients/">Clients</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/clients/test1/">Test1</a> </li>
</ul>
</li>
<li class="has-child"> <a href="/services/">Services</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/services/test2/">Test2</a> </li>
</ul>
</li>
</ul>
</nav>
我在这里重复了我的问题 - jsfiddle。
在鼠标离开时,反向动画效果就消失了。
我认为这与"display" 属性有关,但我不确定如何解决这个问题。我想发生这种情况的原因是悬停时 "display:block",但随后又恢复为 display:none?
如果我随后在子菜单元素上强制 "display:block",它会立即显示所有子菜单选项。
HTML
<nav>
<ul class="level-2">
<li class="has-child"> <a href="/clients/">Clients</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/clients/test1/">Test1</a> </li>
</ul>
</li>
<li class="has-child"> <a href="/services/">Services</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/services/test2/">Test2</a> </li>
</ul>
</li>
</ul>
</nav>
JQuery
$(document).ready(function () {
$('.level-2 li').on({
mouseenter: function () {
$('.submenu').stop().animate({ 'margin-left':"300px" }, 1000);
},
mouseleave: function () {
$('.submenu').stop().animate({ 'margin-left':"-200px" }, 1000);
}
});
});
问题是 display: none
分配给 .submenu
规则,所以只要您将光标移出元素,display
就会设置为 none
将从渲染中删除该项目。
$(document).ready(function() {
$('.level-2 > li').on({
mouseenter: function() {
$('.submenu', this).stop().removeClass('hidden').animate({
'margin-left': "300px"
}, 1000);
},
mouseleave: function() {
$('.submenu', this).stop().animate({
'margin-left': "-200px"
}, 1000);
}
});
});
nav ul li a {
list-style: none;
color: #cccccc;
}
.hidden {
display: none;
}
.submenu {
position: fixed;
left: -120px;
top: 0;
width: 200px;
height: 100%;
background: #3a4247 none repeat scroll 0 0;
z-index: -1;
filter: alpha(opacity=80);
-moz-opacity: 0.8;
-khtml-opacity: 0.8;
opacity: 0.8;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<nav>
<ul class="level-2">
<li class="has-child"> <a href="/clients/">Clients</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/clients/test1/">Test1</a> </li>
</ul>
</li>
<li class="has-child"> <a href="/services/">Services</a>
<ul class="sublevel level-3 submenu">
<li class="nav-item"> <a href="/services/test2/">Test2</a> </li>
</ul>
</li>
</ul>
</nav>