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

在桌面浏览器中加载jQuery脚本,但不在移动浏览器中加载,jquery,Jquery,我想在桌面浏览器中加载特定的jQuery脚本/函数,但不想在移动浏览器中加载。目前,该脚本在移动浏览器上运行速度非常慢,但在桌面浏览器上运行良好 该功能是一个平滑滚动插件,因此当用户单击链接时,页面将平滑滚动到同一页面上的锚。它不需要在移动浏览器上平滑地滚动——速度太慢,而且常常不起作用 我需要在下面的代码中添加什么来确保它在桌面浏览器中仍然正常执行,而不是在移动浏览器中执行(特别是iPad/iPhone/iPod) !window.jQuery&&document.write(unescape

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

该功能是一个平滑滚动插件,因此当用户单击链接时,页面将平滑滚动到同一页面上的锚。它不需要在移动浏览器上平滑地滚动——速度太慢,而且常常不起作用

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

!window.jQuery&&document.write(unescape(“%3Cscript src=”js/lib/jQuery/jQuery.js”%3E%3C/script%3E');
$(文档).ready(函数(){
$('a[href*=“#”]”)。live('click',function(){
if(this.hash){
$.bbq.pushState(“#/”+this.hash.slice(1));
返回false;
}
});
$(窗口).bind('hashchange',函数(事件){
var tgt=location.hash.replace(/^\/?/,“”);
if(document.getElementById(tgt)){
$.smoothScroll({scrollTarget:'#'+tgt});
}
});
$(window.trigger('hashchange');
});

查找是否存在
触摸屏
,如果它不存在,则您很可能正在处理桌面:

编辑:我最初的try/catch方法显然不受欢迎()


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

<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>

上面第二段的代码片段,请回答:

在服务器上而不是在客户端上执行。检查用户代理并决定是否添加脚本。Travis-感谢您的回答!我还有一个问题。我将代码粘贴到您放置/*desktop things*/注释的位置,但不幸的是,它现在无法在桌面上工作。为了使它正常工作,我应该添加/省略哪些内容?@rossautomatica-这一定是您代码的其他方面。尝试查看此JSFIDLE是否为您发出警报:。如果是这样的话,那么也许你在某个地方改变了范围?不看代码就很难知道发生了什么变化。如果试图在闭包之外访问此函数,则可能没有
isDesktop
变量的作用域。您可以将它附加到全局名称空间(请参见编辑)。现在一切都正常了-我没有包括$(document).ready(function())部分代码出现在我的原始脚本中。我添加了它,它似乎在桌面和移动设备上都能正常工作。再次感谢!谢谢你的回答。这也适用于多个.js文件吗?是的,这也适用于多个.js文件。只需在你的病情之后添加你想要包含的那些js文件(touch/browser-width/browser-agent)是真的。我更新了我的答案,以显示如何添加多个javascript文件,如果加载后需要执行任何javascript,只需将其放在done()函数中即可。感谢您的帮助。Travis的解决方案对我有效,因此我同意了,但我也感谢您的帮助!
$(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 */ }
});
<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>
function is_touch_device() {
  return !!('ontouchstart' in window) // works on most browsers 
      || !!('onmsgesturechange' in window); // works on ie10
};