在桌面浏览器中加载jQuery脚本,但不能移动

时间:2013-03-31 18:22:23

标签: jquery

我想在桌面浏览器中加载特定的jQuery脚本/函数,但不是移动浏览器。目前,该脚本在移动浏览器上运行速度非常慢,但在桌面浏览器上运行良好。

有问题的功能是一个平滑的滚动插件,因此当用户点击链接时,页面会平滑地滚动到同一页面上的锚点。它没有必要在移动浏览器上平滑滚动 - 它太慢了,而且通常不起作用。

我需要在下面的代码中添加什么来确保它仍然在桌面浏览器中正常执行,而不是移动(特别是iPad / iPhone / iPod)?

  <script>!window.jQuery && document.write(unescape('%3Cscript src="js/lib/jquery/jquery.js"%3E%3C/script%3E'));</script>    
<script src="js/css_browser_selector.js"></script>
<script src="js/src/jquery.smooth-scroll.js">    
</script>
<script src="js/lib/jquery.ba-bbq.js"></script>
<script>
$(document).ready(function() {
  $('a[href*="#"]').live('click', function() {
    if ( this.hash ) {
      $.bbq.pushState( '#/' + this.hash.slice(1) );
      return false;
    }
  });

  $(window).bind('hashchange', function(event) {
    var tgt = location.hash.replace(/^#\/?/,'');
    if ( document.getElementById(tgt) ) {
      $.smoothScroll({scrollTarget: '#' + tgt});
    }
  });

    $(window).trigger('hashchange');
});
 </script>

2 个答案:

答案 0 :(得分:11)

<强> jsFiddle Demo

寻找touch的存在,如果它不存在,那么你更有可能处理桌面:

修改:我原来的try / catch方法显然已被弃用(https://stackoverflow.com/a/4819886/1026459

$(document).ready(function() {
 var isDesktop = (function() {
  return !('ontouchstart' in window) // works on most browsers 
  || !('onmsgesturechange' in window); // works on ie10
 })();
 //edit, if you want to use this variable outside of this closure, or later use this:
 window.isDesktop = isDesktop;
 if( isDesktop ){ /* desktop things */ }
});

答案 1 :(得分:4)

您可以尝试检索用户代理并使用该信息来决定是否要包含平滑滚动脚本。另一种解决方案是检查浏览器宽度,然后决定是否要包含脚本。

<script>
(function ($) {
   if(is_touch_device()) {
      $.when(
         $.getScript( "/mypath/myscript1.js" ),
         $.getScript( "/mypath/myscript2.js" ),
         $.getScript( "/mypath/myscript3.js" ),
         $.Deferred(function( deferred ){
            $( deferred.resolve );
         })
      ).done(function(){
          //place your code here, the scripts are all loaded
      });
   }
})(jQuery);
</script>

使用when()需要jQuery 1.5或更高版本,1.0中添加了getScript()

编辑正如travis所说,你也可以寻找触摸事件。 在这种情况下,您应该使用:

function is_touch_device() {
  return !!('ontouchstart' in window) // works on most browsers 
      || !!('onmsgesturechange' in window); // works on ie10
};

上面第二个SO回答的片段:What's the best way to detect a 'touch screen' device using JavaScript?