Javascript 如何在modernizr.touch-loop中正确调用jquery函数?

Javascript 如何在modernizr.touch-loop中正确调用jquery函数?,javascript,jquery,modernizr,Javascript,Jquery,Modernizr,我正在使用Modernizr 2.7.1检测用户是否使用触摸设备,以便在BigVideo.js的全屏视频背景或移动设备的静态图片之间切换: $(function() { var BV = new $.BigVideo({useFlashForFirefox:false}); BV.init(); if (Modernizr.touch) { BV.show('/img/background-dock.jpg'); } els

我正在使用Modernizr 2.7.1检测用户是否使用触摸设备,以便在BigVideo.js的全屏视频背景或移动设备的静态图片之间切换:

$(function() {
        var BV = new $.BigVideo({useFlashForFirefox:false});
        BV.init();
if (Modernizr.touch) {
            BV.show('/img/background-dock.jpg');
        } else {
            BV.show('/vid/test.mp4', {altSource:'/vid/test.ogv', ambient:true});
        }
});
不幸的是,静态图像没有响应,缩放效果也不好,尤其是在较小的屏幕上

因此,我希望使用另一个脚本来显示图像,该脚本本身可以完美地工作:

$(function() {
        $.vegas({
            src:'/img/background-dock.jpg'
        });
        $.vegas('overlay', {
            src:'/img/overlays/01.png'
        });
    }); 
如果我将此代码放在
BV.show('/img/background dock.jpg')中循环,代码未执行,即未发生任何事情:

 <script>

$(function() {
        var BV = new $.BigVideo({useFlashForFirefox:false});
        BV.init();
if (Modernizr.touchevents) {
            BV.show($(function() {$.vegas({src:'/img/background-dock.jpg'}); }););
        } else {
            BV.show('/vid/test.mp4', {altSource:'/vid/test.ogv', ambient:true});
        }
});
</script> 

$(函数(){
var BV=new$.BigVideo({useFlashForFirefox:false});
BV.init();
if(现代化触摸事件){
show($(function(){$.vegas({src:'/img/background dock.jpg'});}););
}否则{
show('/vid/test.mp4',{altSource:'/vid/test.ogv',ambient:true});
}
});
不幸的是,我的Javascript知识仍然有限

如何将代码正确地放入循环中?

(从我对github问题的回答中交叉发布…)

Modernizr.touch
已重命名为
Modernizr.touchevents
,因为它实际上是一种触摸事件检测。正如你在书中看到的

有时你有一个触摸设备。。有时您会有webkit touch事件。有时会出现MS指针事件

因此,在本例中,您还需要执行
(modernizer.touchevents | | modernizer.pointerevents)

不幸的是,不在2.*分支中,因为它是在3.0左右构建的,尚未发布。您需要从当前主分支构建Modernizer构建(说明包含在自述文件中),或者手动将pointerevents detect添加到Modernizer构建中

也就是说,触摸屏对于移动设备来说是一个糟糕的指示器。许多新的Windows8平板电脑都支持触摸功能,可以获得静态背景

您真正要做的是检查是否支持自动播放,但你需要支持它

干杯


现在已经讲完了,关于你的问题

BV.show
不接受函数作为参数

如果你只在这一个地方使用它,你真的不需要让你的访问者下载一个完全独立的图书馆(维加斯)来缩放图片。您可以通过查看为该元素生成的css并将其添加到页面中来重新创建它们正在做的事情。然后,您可以在HTML元素上切换一个类(就像Modernizer如何添加它的类)来选择性地隐藏或显示它,而不是现在正在执行的
BV.show(vegasstuff)

类似于

<script>
  if (Modernizr.touch) {
    $('html').addClass('showOverlay');
  }
  else {
    // do the video
  }
</script>
<style>
  .overlay {
    display: none;
    margin: 0;
    padding: 0;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
  }
  .showOverlay .overlay {
    display: block;
    background-image: url(/img/background-dock.jpg);
  }
</style>

if(现代化触摸屏){
$('html').addClass('showOverlay');
}
否则{
//做视频
}
.覆盖{
显示:无;
保证金:0;
填充:0;
位置:固定;
左:0;
排名:0;
宽度:100%;
身高:100%;
}
.showOverlay.overlay{
显示:块;
背景图像:url(/img/background dock.jpg);
}

;)问题是如何在modernizer循环中正确调用vegas.js函数,让它成为.touch或.touchevents。对不起,我是个疯子…哦,天哪,对不起。没有在介绍之后读。完全是我的错。我会更新更多的信息。这正是我想要的。非常感谢兄弟。唯一要确保的是,支持视频背景的浏览器没有下载背景图像。确保检查网络选项卡。对不起,如果这是一个愚蠢的问题,那么“检查网络选项卡”是什么意思?对于带有大触摸屏的Windows 8设备,它应该显示视频而不是背景图像,是否可以在Javascript代码中包含屏幕分辨率检查?即,我们假设每个屏幕分辨率为1920 x 1080像素或更高的触摸设备都是桌面设备。不理想,但总比没有好。