所以我有一个插件(某种灯箱/游览/图库)只需点击一下按钮即可运行,当点击该按钮时,用户可以使用键盘按键浏览插件(左侧和右侧)右上角/下一个)但是当插件到达终点(最后一张图像)并且用户在用户单击按钮时继续按下右箭头键并且插件再次运行时,将触发先前注册的按键。
有没有办法清除所有已注册的按键,如清洁chache?
// keydown part
$('body').on('keydown', function(e){
/**
* Space key.
**/
if(e.keyCode == 32){
//run code
}
/**
* Arrow left key.
**/
if(e.keyCode == 37){
//run code
}
/**
* Arrow right key.
**/
if(e.keyCode == 39){
//run code
}
});
答案 0 :(得分:3)
正确使用on()
附加事件处理程序时,可以使用off()
将其分离。如果您没有向其传递函数,它将删除该事件的所有事件处理程序:
$("body").off( "keydown" );
当你在<body>
tho上这样做时,这有点笨拙,因为你最终可能会删除不属于你的插件的其他按键处理程序。更好的选择是将特定函数传递给off()
,这样您只需删除该处理程序。你可以用这样的结构:
// IIFE to encapsulate plugin variables
(function() {
function keyDownHandler(e) {
if(e.keyCode == 39) {
// code...
}
}
// attach the handler
body.on('keydown', keyDownHandler);
// some function to handle moving through the carousel
function showImage() {
if(endOfCarousel) {
// remove the handler
body.off('keydown', keyDownHandler);
}
}
})();
顺便说一下,unbind()
中提及的bind()
用于附加{{1}}的事件,并且不太受欢迎。
答案 1 :(得分:0)
您正在使用Jquery 它具有绑定或取消绑定事件的功能 它需要您要取消订阅的事件名称。 我建议看看this link以便更好地理解。 你可以使用类似这样的东西
if(end of the carosel){
$(this).unbind(your desired event)
}
答案 2 :(得分:0)