javascript - 切换移动导航时如何防止滚动

标签 javascript jquery html css mobile

我用 HTML CSS 和 BS3 制作的网站的移动导航非常基础。但我想在切换汉堡包按钮时禁用 body 其余部分的滚动。

我的问题是当它打开时,您无法滚动,这正是我想要的。但是当您关闭菜单时,它不起作用。

这里是一些 HTML:

  <!--        mobile nav links-->
              <div class="mob-div-nav">
                <div class="row">
                  <div class="col-xs-12" style="height:100%;">

                  </div>
                </div>
              </div>
      <!--        END Mobile Nav-->

这是 Js:

  $("#hamburger").on("click", function (event){

  $(".mob-div-nav").slideToggle(500);

  function noscroll() {
  window.scrollTo( 0, 0 );
}
  // add listener to disable scroll

  if ($(".mob-div-nav").css("display") == "block"){

    window.addEventListener('scroll', noscroll);

    } else if ($(".mob-div-nav").css("display") == "none") {

      window.removeEventListener('scroll', noscroll);

    }
});

最佳答案

在函数内部而不是外部使用 if 语句..你的代码应该是这样的

$(document).ready(function(){
  // #hamburger click event
  $("#hamburger").on("click", function (event){
    $(".mob-div-nav").slideToggle(500);
  }); // End of #hamburger click event
  // window scroll event
  $(window).on('scroll' , noscroll);
});

// functions here
// noscroll function
function noscroll() {
  if ($(".mob-div-nav").is(':visible')){
    window.scrollTo( 0, 0 );
  }
}

解释:

  • $(document).ready(function(){ - 当文档准备就绪时 read Here
  • window.addEventListener 是一个纯 javascript 而 $(window).on('scroll' 是一个 jquery .. jQuery .on(); vs JavaScript .addEventListener();
  • .is(':visible') 是一个 jquery 函数,检查元素是否可见,:hidden 如果元素隐藏,:checked 如果检查等等..你可以阅读关于 .is() here

关于javascript - 切换移动导航时如何防止滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849327/

相关文章:

css - 设计网页组件布局的常用方法

javascript - 在 Chrome 上使用 Jquery 检测 Shift + 单击

jquery - mobile_fu 通过 AJAX 渲染所以看起来

javascript - jQuery:确定容器中至少一个 child 是否可见的最快方法

javascript - 将画笔限制在离散范围内

javascript - 如何使用 sentry v5 全局忽略错误以减少噪音

javascript - jQuery,切换按钮显示加号或减号

HTML 电子邮件定位

javascript - php 中的自动换行

javascript - 箭头键在 fancybox 中不起作用