如何有条件地使用JavaScript像CSS3媒体查询,方向?

如何有条件地使用JavaScript像CSS3媒体查询,方向?

例如我可以写特定的CSS

@media only screen and (width : 1024px) and (orientation : landscape) { .selector1 { width:960px} } 

现在我只想运行一些JavaScript,如果它匹配相同的条件

喜欢

 @media only screen and (width : 1024px) and (orientation : landscape) { A javascript code here } 

我有一个外部的JavaScript例如ajax/jQuery/jquery-1.6.4.min.js ,它应该只能运行在特定的屏幕大小和方向

这里有一个更好的方法来做同样的javascript:

https://github.com/paulirish/matchMedia.js/

testing移动设备媒体查询

 if (matchMedia('only screen and (max-width: 480px)').matches) { // smartphone/iphone... maybe run some small-screen related dom scripting? } 

testing横向方向

 if (matchMedia('all and (orientation:landscape)').matches) { // probably tablet in widescreen view } 

…我只想运行一个JavaScript,如果浏览器的最大宽度是1900px,最小宽度是768

编辑:其实,这是错的。 如果您使用移动设备,请使用:

 function doStuff(){ landscape = window.orientation? window.orientation=='landscape' : true; if(landscape && window.innerWidth<1900 && window.innerWidth > 768){ //code here } } window.onload=window.onresize=doStuff; if(window.onorientationchange){ window.onorientationchange=doStuff; } 

我可以想到一个快速的解决scheme:将一些样式有条件地应用到一个不可见的div,并检查它们是否使用javascript:

 div#test { display: none } @media only screen and (width : 1024px) and (orientation : landscape) { div#test { background-color: white; } } 
 if(document.getElementById('test').style.backgroundColor == 'white') mediaSelectorIsActive(); 

可能值得一提的是,您可能想要插入的orientationchange事件如下所示:

 $('body').bind('orientationchange', function(){ // check orientation, update styles accordingly }); 

我知道关于这个事件是由移动Safari发起的,你必须检查其他浏览器。

您可以将媒体查询重写为javascriptexpression式:

 function sizehandler(evt) { ... } function orientationhandler(evt){ // For FF3.6+ if (!evt.gamma && !evt.beta) { evt.gamma = -(evt.x * (180 / Math.PI)); evt.beta = -(evt.y * (180 / Math.PI)); } // use evt.gamma, evt.beta, and evt.alpha // according to dev.w3.org/geo/api/spec-source-orientation ... } window.addEventListener('deviceorientation', orientationhandler, false); window.addEventListener('MozOrientation', orientationhandler, false); window.addEventListener('load', orientationhandler, false); window.addEventListener('resize', sizehandler, false); window.addEventListener('load', sizehandler, false);