javascript - 点击时启用/禁用触摸移动

标签 javascript jquery html css

我目前正在构建一个具有非常简单的叠加效果的网站 - 我有一个“汉堡包”(.mobilemenu) 菜单图标,单击它会在我的导航叠加层上切换一个伪类 (.mobile-nav)。我正在寻找添加一些代码,这些代码也会在初始点击时禁用 touchmove,当再次点击 (.mobilemenu) 时,恢复默认行为。

这是我的代码:

jQuery('.mobilemenu').click(function(e) {
    jQuery(this).toggleClass('is-active');
    jQuery('.mobile-nav').toggleClass('active');


    e.preventDefault();
});

我尝试了以下方法:

jQuery('.mobilemenu').click(function(e) {
    jQuery(this).toggleClass('is-active');
    jQuery('.mobile-nav').toggleClass('active');
    if('.mobile-nav').hasClass('active') {
        $(body).on('touchmove', function(e) {
        e.preventDefault();
        }};

    e.preventDefault();
});

这显然是行不通的!

坦率地说,Javascript/JQuery 对我来说很新,所以我确定这里的语法不正确。我可以切换禁用触摸移动的 body 类吗?还是我必须以某种方式重写代码并使用 bind

编辑:根据@John R 的建议,我稍微更改了代码的语法 - 这是一个 fiddle :JS fiddle

我的代码现在如下所示:

jQuery('.mobilemenu').click(function(e) {
  jQuery(this).toggleClass('is-active');
   jQuery('.mobile-nav').toggleClass('active');
     if(jQuery('.mobile-nav').hasClass('active')) {
     $(body).on('touchmove', function(e) {
     e.preventDefault();
  }};

e.preventDefault();
});

然而,这似乎完全杀死了叠加层!我猜虽然 if(jQuery('.mobile-nav').hasClass('active')) { 等行现在是正确的,但以下位可能不是?

编辑 2:经过一番尝试后,我更新了语法,叠加层再次工作,但我仍然可以在 iPhone 上滚动叠加层后面的页面主体:http://jsfiddle.net/jameshenry/bzau0jaz/1/ -如果有人有任何想法,我将不胜感激!

jQuery('.mobilemenu').click(function(e) {
    jQuery(this).toggleClass('is-active');
    jQuery('.mobile-nav').toggleClass('active');

    if(jQuery('.mobile-nav').hasClass('active')) {
        $(body).on('touchmove', function(e){
            e.preventDefault()}
                  )};
});

编辑 3:在对结构和语法进行更多尝试之后,我终于在单击时得到了“touchmove,false”。唯一的问题是它不会切换,因此滚动被永久禁用!

jQuery('.mobilemenu').click(function(e) {
    jQuery(this).toggleClass('is-active');
    jQuery('.mobile-nav').toggleClass('active');

    if(jQuery('.mobile-nav').hasClass('active')) {
        $('body').on('touchmove', false);
    };
});

我认为 Else 语句是可行的方法,但我已尝试添加以下内容:

jQuery('.mobilemenu').click(function(e) {
    jQuery(this).toggleClass('is-active');
    jQuery('.mobile-nav').toggleClass('active');

    if(jQuery('.mobile-nav').hasClass('active')) {
        $('body').on('touchmove', false);
    };
    else { $('body').on('touchmove', true);};
});

但这似乎只是停止了覆盖工作 - 有没有办法在关闭时重新打开“touchmove”?这是一个 fiddle http://jsfiddle.net/jameshenry/bzau0jaz/2/

最佳答案

改变这个

if('.mobile-nav').hasClass('active'){
  //...
}

if(jQuery('.mobile-nav').hasClass('active')){
   //...
}

关于javascript - 点击时启用/禁用触摸移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213493/

相关文章:

Javascript - 不使用删除删除对象键

javascript - 未捕获范围错误 : Maximum call stack size exceeded . 。参数化构造函数

javascript - Bootstrap 3按钮组,试图获取点击了哪个按钮的值

javascript - jQuery + 无处不在 : Return a document object from a URL

jquery - 如何设置(换行: 'circular' ) (loop) in “auto scroll” plugin in the new version of jCarousel (3. 0)?

javascript - 基于浏览器的实时视频聊天,没有闪光灯

javascript - Jquery div 从 iframe 内加载文件

javascript - 动画两个div以无限期地从右到左循环

javascript - 滑动切换 [Jquery 函数] 不工作

javascript - 本地存储未定义