使用JavaScript实现media queries检测

最近在做移动设备适配,需要根据设备加载不同的样式。开始的时候使用css3 media queries检测来引入不同的样式,但是用不支持css3的ie浏览器时就蛋疼啦。

在搜索解决这个问题是发现了这篇文章http://oklai.name/2013/05/286/,很好的解决了这个问题。

device.js

(function(){
        var UA=window.navigator.userAgent,
            detectStyle='<style type="text/css">@media (max-width: 640px) {#MobileDetect {color: rgb(12, 34, 56)}}</style>',
            detectDiv='<div id="MobileDetect"></div>';
        if(/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile/.test(UA)){
            var style=createElement(detectStyle),
                div=createElement(detectDiv);
            document.head.appendChild(style);
            document.head.appendChild(div);
            init(getStyle(div,"color")==='rgb(12, 34, 56)');
            style.remove();
            div.remove();
        }else{
            init(false);
        }
        
        function init(flag){
            if(!window.zDevice)
                window.zDevice={};
            if(flag){
                window.isMobile=true;
                window.zDevice.isSmallScreen=true;
            }
        }
        
        function getStyle(oElm,strCssRule){
            var strValue="";
            if(document.defaultView&&document.defaultView.getComputedStyle){
                strValue=document.defaultView.getComputedStyle(oElm,"").getPropertyValue(strCssRule);
            }else if(oElm.currentStyle){
                strCssRule=strCssRule.replace(/\-(\w)/g,function(strMatch,p1){return p1.toUpperCase();});strValue=oElm.currentStyle[strCssRule];
            }
            return strValue;
        }
        
        function createElement(string){
            var elem=document.createElement("div");
            elem.innerHTML=string;
            return elem.childNodes[0];
        }
})();

在页面头部先引入这个js,然后根据检测结果加载不同的css样式

<html>
    <head>
        <title> </title>
        <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
        <script type="text/javascript" src="device.js"></script>
        <script type="text/javascript">
            (function () {
                var link = document.createElement('link');
                    link.rel = 'stylesheet';
//是移动设备并且设备宽度不超过640时加载mobiel640.css
if (zDevice.isSmallScreen) { link.href = 'mobile640.css'; } else { link.href = 'web.css'; } document.getElementsByTagName('head')[0].appendChild(link); })(); </script> </head> <body> you code here. </body> </html>

 

转载于:https://www.cnblogs.com/pengkw/p/3560559.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值