我有悬停(的mouseenter,鼠标离开)执行的动画的功能。我试图解开功能(因为我不希望用户与它交互),我点击一个按钮后。这有效,但我遇到的问题是重新绑定悬停功能,以便当用户再次单击该按钮时,动画和悬停效果将重新使用。
不知道这是否是正确的方式来实现这一点,但希望我可以得到一些关于这个问题的帮助。谢谢。
我有悬停(的mouseenter,鼠标离开)执行的动画的功能。我试图解开功能(因为我不希望用户与它交互),我点击一个按钮后。这有效,但我遇到的问题是重新绑定悬停功能,以便当用户再次单击该按钮时,动画和悬停效果将重新使用。
不知道这是否是正确的方式来实现这一点,但希望我可以得到一些关于这个问题的帮助。谢谢。
不断解绑和重新绑定通常不是最好的方法。它需要比需要更多的工作。
一种选择是在悬停时在元素上设置一个类,并让其他代码在调用时检查该类的存在。
$('.myelem')
.on("mouseenter", function() {
$(this).addClass("hovering");
})
.on("mouseleave", function() {
$(this).removeClass("hovering");
})
.on("click", function() {
if ($(this).hasClass("hovering") === false) {
// run the code
}
});
类似的方法是添加了类,但使用事件委托的方法来控制行为,使得选择被定义为在不具备"hovering"
类元素的工作。
$('.myelem')
.on("mouseenter", function() {
$(this).addClass("hovering");
})
.on("mouseleave", function() {
$(this).removeClass("hovering");
});
$("#container").on("click", ".myelem:not(.hovering)", function() {
// run the code
});
+1为良好的编程方法 – StaticVariable
'$ .hasClass()'将始终返回一个布尔型'true'或布尔型'false',所以'=== false'并不是真的需要。另外,您可以将重复的$ .on调用与一个调用并使用'$ .toggleClass'。从性能的角度来看,我对最后一点警惕,我认为你的意思是['.myelem:not(.hovering)'](http://api.jquery.com/not-selector/),一个':'。 –
@JaredFarrish:是的,我的'.not'应该是':not'。我会更新。谢谢。我做了'=== false'有两个原因。首先是我用一个“逻辑上没有”的操作符键入它,但我想更加清楚。其次,我几乎总是使用'===',仅仅是出于习惯。这是一个个人编码标准。但是你是对的,如果我在这种情况下使用'==',比较算法将是相同的。我做了2个处理程序,因为我猜测还有更多工作要做。我可以做一个,并测试事件类型,但两个似乎更清晰。另外'toggleClass'需要第二个参数让我感觉舒适。 –
下面是使用class
名称,以保持该元素的从反应到mouseenter mouseleave
多个阻塞上下文的演示:
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
$('.highlight')
.on('mouseenter mouseleave', function(){
if (!$(this).is('canceled')) {
$(this).toggleClass('hovered');
}
})
.on('click', 'button', function(){
$(this).parent().toggleClass('canceled');
});
这是使得它的工作线:
if (!$(this).is('canceled')) {
+1我想我误解了OP想禁用哪些事件。我认为你的意图是什么。 –
哦,对,我甚至没有注意到它们的区别。 –
你想设置一个阻塞变量和det点击'按钮'切换'hover'。我会建议'$('#theElement')。data('inHover',true)'。或者,也可以使用类名和'if($('#theElement')。is('。hoverable')){...魔术发生...}'。 –