当前位置 博文首页 > 文章内容

    横竖屏检测 orientation resize matchMedia

    作者: 栏目:未分类 时间:2020-09-26 17:00:10

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    最近有人提需求,产品要适配横竖屏,这就令人头秃了呀。

    这在家办公也不让闲着点。虽然说需求提出来了,但是我们身为一个前端er,还是要有自己的想法呀,我们要统计一波数据看看到底有多少人在横屏使用我们的产品。demo测试地址

     

    方案一:orientation

    window.addEventListener("orientationchange", function(event) {
        // 等于0或者180竖屏
        // 等于90或者-90度横屏
        _this.eventValue = event.orientation || 
            (screen.orientation && screen.orientation.angle)
    }, false);
    1. 通过 orientationchange 事件来监听横竖屏的变化
    2. 通过 orientation 来获取当前屏幕的方向角度
    3. 兼容性比较差,https://www.caniuse.com/

     

    方案二:resize判断宽高

    基于上个方案的兼容性,那么我们搞个兼容性好一点的。

    window.addEventListener("resize", function(event) {
        _this.innerWidth = window.innerWidth
        _this.innerHeight = window.innerHeight
    }, false);
    1. 通过 resize 事件来监听浏览器的宽高变化
    2. 通过比对宽高来判断当前横竖屏状态。
    3. 因为是移动端,所以键盘弹出的时候也会干扰。
    4. 兼容性当然是棒棒的。

     

    方案三:matchMedia 媒体查询

    matchMedia 是什么?

    matchMedia() 可以解析任何一个 css @media 的特性,如 min-height, min-width, orientation 等。

    matchMedia() 返回一个新的 MediaQueryList 对象,表示指定的媒体查询字符串解析后的结果

    MediaQueryList 对象有以下两个属性:

    • media:当前查询的内容,也就是你传入的内容。
    • matches:检测查询结果,如果匹配,则值为 true,否则为 false。

    如何使用

    var mediaQueryList = window
        .matchMedia("screen and (orientation: portrait)");
    if(window.mediaQueryList && mediaQueryList.addListener){
        mediaQueryList.addListener(function(){
            _this.matchMediaAddEvent = 
                mediaQueryList.matches?'竖屏':'横屏'
        })
    }

    vi设计http://www.maiqicn.com 办公资源网站大全https://www.wode007.com

    方案四:媒体查询

    看到这个方案你是不是满头问号。这个方案和上个不一样吗?

    哈哈,这个方案是我在网上看到的,有可能是那个人不知道 matchMedia 这个 API。或者是 API 有兼容性问题,他自己搞了一个 hack 方法。

    原理也是依赖css的媒体查询。只不过他通过定时比对样式来判断当前状态。