Javascript 在单击事件中取消绑定默认值?
我目前在创建移动导航时遇到了一些问题。这是一个简单的汉堡图标,当你点击它时,它会打开一个全屏菜单。问题是,当覆盖层可见时,我试图禁用滚动。现在我想我可以通过添加Javascript 在单击事件中取消绑定默认值?,javascript,jquery,mobile,scroll,nav,Javascript,Jquery,Mobile,Scroll,Nav,我目前在创建移动导航时遇到了一些问题。这是一个简单的汉堡图标,当你点击它时,它会打开一个全屏菜单。问题是,当覆盖层可见时,我试图禁用滚动。现在我想我可以通过添加 $('body').bind('touchmove', function(e){e.preventDefault()}); 这只工作了一次,但当你再次关闭菜单时,默认设置仍处于活动状态,我不知道如何解除绑定,因为汉堡图标用于打开和关闭菜单 我在下面添加了我使用的完整js脚本 $(document).ready(function ()
$('body').bind('touchmove', function(e){e.preventDefault()});
这只工作了一次,但当你再次关闭菜单时,默认设置仍处于活动状态,我不知道如何解除绑定,因为汉堡图标用于打开和关闭菜单
我在下面添加了我使用的完整js脚本
$(document).ready(function () {
$(".icon").click(function () {
$('body').bind('touchmove', function(e){e.preventDefault()});
$(".mobilenav").fadeToggle(500);
$(".top-menu").toggleClass("top-animate");
$(".mid-menu").toggleClass("mid-animate");
$(".bottom-menu").toggleClass("bottom-animate");
});
});
谢谢你的帮助 使用
.on()
和.off()
jQuery方法很容易实现
$(document).on('touchmove', 'body', function(e){e.preventDefault()});
$(document).off('touchmove', 'body', function(e){e.preventDefault()});
但是还有一个unbind()
函数
$('body').unbind('touchmove', function(e){e.preventDefault()});
代码示例:
$(document).ready(function () {
var cancelScroll = function(e) { e.preventDefault(); }
$(".icon").click(function () {
if ($(".mobilenav").is(":visible")) {
$('body').unbind('touchmove', cancelScroll);
} else {
$('body').bind('touchmove', cancelScroll);
}
$(".mobilenav").fadeToggle(500);
$(".top-menu").toggleClass("top-animate");
$(".mid-menu").toggleClass("mid-animate");
$(".bottom-menu").toggleClass("bottom-animate");
});
});
注意:从处理程序返回false
相当于调用事件对象上的.preventDefault()
和.stopPropagation()
所以可能只是:
var cancelScroll = function() { return false; }
添加标志以区分并在关闭时解除绑定
$(document).ready(function () {
var isClose = false;
$(".icon").click(function () {
if(isClose){
$('body').unbind('touchmove', function(e){e.preventDefault()});
isClose = false;
}else{
$('body').bind('touchmove', function(e){ e.preventDefault();});
isClose = true;
}
$(".mobilenav").fadeToggle(500);
$(".top-menu").toggleClass("top-animate");
$(".mid-menu").toggleClass("mid-animate");
$(".bottom-menu").toggleClass("bottom-animate");
});
});
不幸的是,这不起作用。不过,我确实有了创建变量的想法。我对js不是很有经验,所以我看不出哪里出了问题。如果你能添加一个提琴,我可以看一下。问题是在手机上,我可以给你它所在的链接吗?如果你能与我分享上面代码(答案)的链接,我可以调试并告诉你。啊,我看到问题在另一个答案中得到了解决,感谢你的帮助。我知道这些函数,但我必须知道在我的脚本中添加它们的位置。因此,我不确定在哪里解除阻止默认绑定。感谢您的快速响应,但我遇到了与另一个答案相同的问题。解除绑定部分不起作用。请尝试改用.on()和.off()函数!而不是捆绑和解开?啊。我记得为什么的问题。您需要绑定和解除绑定完全相同的函数。但定义的函数不同。我的意思是-你需要把你的函数放入一个变量中。我会在1分钟内更新答案