我以前做过这个,但是我无法让它工作......
我需要以下jquery才能拥有.stopPropagation函数,因此如果用户过快地悬停在三个元素上,动画就不会发疯!
$(function () {
var tabContainers = $('div.subMenu > div');
tabContainers.hide();
$('.mainMenuDiv a').hover(
function (e) {
tabContainers.filter(this.hash).slideDown();
e.stop();
},
function(e){
tabContainers.filter(this.hash).slideUp();
e.stopPropagation();
});
});
答案 0 :(得分:4)
听起来您正在寻找取消任何动画不完整的stop
功能。
$('.mainMenuDiv a').hover(
function (e) {
tabContainers.filter(this.hash).stop().slideDown();
},
function(e){
tabContainers.filter(this.hash).stop().slideUp();
}
);
或者如果您想要“回滚”任何正在进行的动画,请尝试:
$('.mainMenuDiv a').hover(
function (e) {
tabContainers.filter(this.hash).stop(true, true).slideDown();
},
function(e){
tabContainers.filter(this.hash).stop(true, true).slideUp();
}
);
查看docs了解详情。
答案 1 :(得分:2)
使用stopPropagation()和stopImmediatePropagation()时要小心,就像它们是同一个东西一样:
Event.stopPropagation()方法阻止事件对象移动到下一个节点,但只能在允许当前节点上的任何其他事件侦听器执行之后。
Event.stopImmediatePropagation()方法还可以阻止事件对象移动到下一个节点,但不允许当前节点上的任何其他事件侦听器执行。
答案 2 :(得分:0)
$(function () {
var tabContainers = $('div.subMenu > div');
tabContainers.hide();
$('.mainMenuDiv a').hover(function () {
tabContainers.filter(this.hash).dequeue().slideDown();
},function () {
tabContainers.filter(this.hash).dequeue().slideUp();
});
});
希望这会有所帮助。 ;)事件从子元素“冒泡”到其所有父元素,您将event.stopPropragation();
或event.stopImmediatePropagation()
。但是要停止动画dequeue()
。
答案 3 :(得分:0)
我可能错了,但这可能有效:
$(function () {
var tabContainers = $('div.subMenu > div');
tabContainers.hide();
$('.mainMenuDiv a').hover(function() {
tabContainers.filter(this.hash).stop().slideDown();
},function() {
tabContainers.filter(this.hash).stop().slideUp();
});
});