解锁click事件中的preventDefault?

时间:2017-08-03 11:46:58

标签: javascript jquery mobile scroll nav

我目前遇到了我创建的移动导航问题。这是一个简单的汉堡包图标,当您点击它时,它会打开一个全屏菜单。问题是我在覆盖层可见时尝试禁用滚动。现在我想通过添加来实现这一点;

$('body').bind('touchmove', function(e){e.preventDefault()});

这可以使用一次,但当你再次关闭菜单时,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");
  }); 
});

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用.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; }

答案 1 :(得分:0)

添加标志以在关闭时区分和取消绑定,

 $(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");
  }); 
});