如何在移动设备上禁用脚本

6

我有一个网站,它有一个视差滚动效果,正在运行skrollr.js脚本。这是一个移动设备为先的网站,但我希望该脚本不要在移动设备上运行,因为它会阻止滚动。有人知道如何在移动设备上防止脚本运行吗?谢谢。

脚本上传的代码在body部分的最后。如果需要其他代码,请告诉我。

<!-- SCRIPTS -->

<script type="text/javascript" src="js/skrollr.js"></script>
<script type="text/javascript">
    skrollr.init();
</script>

<!--/ SCRIPTS -->

1
你是否正在使用一些检测库,比如 modernizr - emerson.marini
1
也许可以在给定的容器上执行一些CSS媒体查询。 - fefe
1
所有的解决方案都在假设移动设备等同于小型浏览器窗口。也许我们应该问一下他是否真的是指没有移动设备,还是只是没有小屏幕,如果是没有移动设备,那么移动设备是否包括平板电脑。 - PlantTheIdea
1
@MelanciaUK - 我本来想表达得更建设性一些,但确实是这样。 :) - PlantTheIdea
2
让 JavaScript 检查它是否在移动设备上... 真是太多错误了。 - PlantTheIdea
显示剩余8条评论
2个回答

8
您可以使用 Modernizr 的触摸检测来判断设备是否支持触屏,如果是,则不初始化脚本。
if (Modernizr.touch) {

}
else 
{
    skrollr.init();
}

或者您可以检查用户代理(这可能不是最佳选项,因为用户代理并不总是可靠的),并编写一个简单的if else,如果不是,则初始化skrollr。

  var isMobile = {
            Android: function () {
                return navigator.userAgent.match(/Android/i);
            },
            BlackBerry: function () {
                return navigator.userAgent.match(/BlackBerry/i);
            },
            iOS: function () {
                return navigator.userAgent.match(/iPhone|iPad|iPod/i);
            },
            Opera: function () {
                return navigator.userAgent.match(/Opera Mini/i);
            },
            Windows: function () {
                return navigator.userAgent.match(/IEMobile/i);
            },
            any: function () {
                return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
            }
        };

        if (isMobile.any()) {

        }
        else {

             skrollr.init(); 
        }

另一种测试方法是通过检查 window.innerWidth,仅在屏幕尺寸大于760px时初始化您的脚本:

if (window.innerWidth > 760) {
skrollr.init();
}

2
不要假设“触摸设备”等同于“小屏幕”。 - Blazemonger
@Blazemonger 确实,这对这些设备不会产生预期的效果。你能想到更好的解决方案吗? - baao
“移动设备”对我来说意味着“小屏幕”,即宽度小于约760像素。请测试window.innerWidth - Blazemonger

0
假设如果你正在编写一个函数名称为exampleNotForMobileDevices(),那么如果窗口宽度小于768,则下一个代码将不会执行,因为我们使用了return。也就是说,如果条件满足,则执行将停止。

function exampleNotForMobileDevicese(){
  if(window.innerwidth < 768){
      return
    }
   your business logics.......

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接