首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在单击事件中解除绑定preventDefault?

在单击事件中解除绑定preventDefault?
EN

Stack Overflow用户
提问于 2017-08-03 11:46:58
回答 2查看 1.6K关注 0票数 0

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

代码语言:javascript
运行
复制
$('body').bind('touchmove', function(e){e.preventDefault()});

这只工作一次,但当您再次关闭菜单时,preventDefault仍然处于活动状态,我不知道如何解除绑定,因为汉堡包图标用于打开和关闭菜单。

我添加了完整的js脚本,我在下面使用;

代码语言:javascript
运行
复制
$(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");
  }); 
});

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-03 11:51:38

使用.on().off() jQuery方法很容易实现!

代码语言:javascript
运行
复制
$(document).on('touchmove', 'body', function(e){e.preventDefault()});
$(document).off('touchmove', 'body', function(e){e.preventDefault()});

但是也有一个unbind()函数!

代码语言:javascript
运行
复制
$('body').unbind('touchmove', function(e){e.preventDefault()});

代码示例:

代码语言:javascript
运行
复制
$(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()

所以它可以是:

代码语言:javascript
运行
复制
var cancelScroll = function() { return false; }
票数 1
EN

Stack Overflow用户

发布于 2017-08-03 11:52:05

添加一个标志以区分和解除关闭时的绑定,

代码语言:javascript
运行
复制
 $(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");
  }); 
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45483276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档