【问题标题】:Disable touch swipe on fullpage.js在 fullpage.js 上禁用触摸滑动
【发布时间】:2014-06-03 10:03:09
【问题描述】:

我将 fullpage.js 插件用于单页营销网站。

我正在使用导航链接跳转到站点周围的场景(全水平),因此我想禁用触摸/滑动(场景之间)功能,因为它会干扰其他触摸元素。

我已经阅读了所有文档,但我不知道如何实现这一点。

欢迎任何帮助。谢谢,杰克。

【问题讨论】:

    标签: javascript jquery touch swipe fullpage.js


    【解决方案1】:

    setAllowScrolling 函数还接受方向的第二个参数,因此以下可用于禁用左/右滚动/滑动:

    $.fn.fullpage.setAllowScrolling(false, 'left, right');

    【讨论】:

      【解决方案2】:

      初始化插件时只需使用选项autoScrolling:false。这样鼠标滚轮不会滑动,触摸事件也不会。

      如果您想保持鼠标滚轮滚动(对于计算机)但禁用触摸事件(触摸设备),那么我建议您以不同的方式为触摸设备初始化插件。 为此,我建议您这样做something like this

      2016 年更新:

      您可以使用选项responsiveWidthresponsiveHeight 以及类fp-auto-height-responsive

      这些选项将禁用指定尺寸下移动设备的自动滚动功能。 fullPage.js 或 onlineexamples 文件夹中提供的示例。

      您还可以使用responsiveSlides 并强制将水平幻灯片转换为响应式垂直部分。这可以通过Responsive Slides extension 完成。

      2014 年 9 月更新:


      一个名为$.fn.fullpage.setAllowScrolling 的方法也可以用于同样的目的。它将禁用触摸滚动和鼠标滚动。


      2014 年 6 月更新:


      autoScrolling:false 只禁用垂直滚动。 如果您还想禁用水平的,现在没有办法做到这一点。您需要对插件进行一些修改。

      在 fullpage.js 里面替换了这个:

      function removeTouchHandler() {
          if (isTablet) {
              $(document).off('touchstart MSPointerDown');
              $(document).off('touchmove MSPointerMove');
          }
      }
      

      为此:

      $.fn.fullpage.removeTouchHandler = function (){ 
          if (isTablet) {
              $(document).off('touchstart MSPointerDown');
              $(document).off('touchmove MSPointerMove');
          }
      };
      

      然后,当您初始化插件时,在 afterRender 回调中调用该公共函数,如下所示:

      $(document).ready(function() {
          $('#fullpage').fullpage({
              afterRender: function(){
                  $.fn.fullpage.removeTouchHandler();
              }
          });
      });
      

      不要调用 fullpage 两次。只需在初始化中添加 afterRender 函数即可。

      【讨论】:

      • 感谢您回复我。我试过“autoScrolling:false”但它不起作用——我认为它只是在加载 DOM 后阻止页面自动滚动。我正在寻找能够停止在触摸设备上向左/向右滑动的东西,因此每个场景只能通过自定义菜单(锚点)访问。
      • @JackBarham 对。我已经更新了我的答案。请检查一下。
      • 感谢您进行更新。我已经按照您上面的建议更新了文件,现在单击任何锚点时它都不会滑动。
      • @JackBarham 你能发布你的网址吗?这将使我更容易看到问题。您是否收到任何控制台错误?
      • $.fn.fullpage.removeTouchHandler = function (){ 函数移到 fullpage.js 文件顶部,就在 setMouseWheelScrolling 函数之前。
      【解决方案3】:

      截至 2017 年 6 月,之前的方法均不适合我。我发现有效禁用触摸的最简单方法如下。

      在 jquery.fullPage.js 你会找到函数setAllowScrolling

      function setAllowScrolling(value, directions){
          if(typeof directions !== 'undefined'){
              directions = directions.replace(/ /g,'').split(',');
      
              $.each(directions, function (index, direction){
                  setIsScrollAllowed(value, direction, 'm');
              });
          }
          else if(value){
              setMouseWheelScrolling(true);
              addTouchHandler();
          }else{
              setMouseWheelScrolling(false);
              removeTouchHandler();
          }
      }
      

      当整页初始化时,它会自动调用setAllowScrolling(true),触发上面的else if(value) 条件。只需注释掉对addTouchHandler() 的调用即可完全禁用它,或添加某种条件使其被调用,例如

      var winw = $(window).width();
      if (winw > 480){
          addTouchHandler();
      } 
      

      使用此方法,左箭头和右箭头在点击时仍然有效,因此仍然可以导航水平幻灯片。需要注意的是,使用$.fn.fullpage.setAllowScrolling(false, 'left, right'); 也会禁用箭头。

      【讨论】:

      • 修改库不是一个好主意...为什么响应模式不适合您?
      • @Alvaro 响应模式运行良好,但滑动手势在小型设备上过于敏感。我有它,所以它像普通的长页面一样垂直滚动,但水平仍然被控制为幻灯片。当向上/向下滚动时,幻灯片会左右跳跃,除了以这种小方式修改库之外,我没有找到一种简单的方法来禁用它。
      • 您可以使用选项touchSensitivity 进行调整。
      • 哇,简直不敢相信我错过了这个选项。谢谢。那么touchSensitivity:0 会完全禁用滑动吗?
      • 只需使用setAllowScrolling 禁用它。
      猜你喜欢
      • 2014-04-22
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多