动画一个-停止另一个|jQuery
Animate one - Stop another | jQuery
我不知道我做错了什么,但没有什么是正确的。基本上它工作得很好,但如果我把鼠标悬停在另一个列表项上,它就会开始动画,上一个仍然存在。
这是JS部分。。。
$('nav#topMenu li').on('mouseenter mouseleave', function(e) {
if(e.type === 'mouseenter') {
$(this).append('<span class="active"></span>');
$('span.active').stop().slideDown('200');
} else {
$('span.active').stop().slideUp('200', function() {
$(this).remove();
});
}
});
这是JS fiddle:JS Fiddle重定向
抱歉悬停背景颜色太难看了。。。我不知道我做错了什么。。。似乎一切都错了!欢迎任何解决方案。非常感谢。
编辑:看起来我还在每一次悬停时都附加了这个跨度,即使它已经附加到了列表项中。哦,天哪。。。
之所以会发生这种情况,是因为两个跨度仍然具有类active
。mouseleave
首先出现,但mouseenter
在两个跨度上触发.stop().slideDown()
。
有几种可能的解决方案,但我认为其中一种是只在span上使用.removeClass('active')
(可能添加另一个具有相同样式的类)。这将导致它一直向上滑动,而真正的活动跨度向下滑动:
http://jsfiddle.net/ExplosionPIlls/HL7Aj/1/
检查动画是否使用.is(":animated")
完成。由于$('span.active')
使用active
类选择所有元素,因此当您在元素之间移动光标时,可以有效地停止所有元素上的动画。您应该在这些元素上应用进一步的动画,条件是它们不执行任何现有动画。
请参见演示。
$(function () {
$('nav#topMenu li').on('mouseenter mouseleave', function(e) {
if(e.type === 'mouseenter') {
$(this).append('<span class="active"></span>');
$('span.active').each(function() {
if (!$(this).is(":animated")) {
$(this).stop().slideDown('200');
}
});
} else {
$('span.active').stop().slideUp('200', function() {
$(this).remove();
});
}
});
});
我认为替换
$('span.active').stop()
带有
$(this).find('span.active').stop()
可能对你有帮助。
相关文章:
- 如何从其中的另一个jquery脚本运行.load()
- 我们如何在jQuery Datatable调用结果中启动另一个jQuery插件,而不是页面就绪函数
- 如何将jQuery中某个函数的字符串作为参数返回给另一个jQuery函数
- 在简单模式中,取消单击时不会调用onClose事件..当我在simple-modal上加载另一个jquery对话框时
- 将所有元素替换为另一个 jquery
- 另一个jQuery滑块在悬停时暂停
- JQuery attr 选择器到字符串,存储为变量,然后传递到另一个 JQuery 选择器
- Jquery 库与另一个 jQuery 库冲突
- 将数据从一个页面传输到另一个jQuery Mobile
- 如何在基于另一个 jquery 日期选择器的 jquery 日期选择器中选择日期
- 为什么这两行 jquery 会淘汰另一个 jquery 元素的事件处理程序
- 如何搜索点击的元素src属性并将其添加到另一个jquery中
- 函数闭包中的另一个jQuery版本
- 检测另一个jquery函数对输入文本框的更改
- 在另一个jquery事件完成后播放声音
- 如何用另一个JQuery函数更新JQuery函数
- jQuery fileDownload与另一个jQuery插件冲突
- 添加另一个jQuery函数到AJAX调用或CSS解决方案
- 如何在另一个 jQuery 函数上调用 jQuery 函数
- 查找jQuery对象是否包含在另一个jQuery对象中