横竖屏检测orientation resize matchMedia

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

方案一:orientation


window.addEventListener("orientationchange", function(event) {
    // 等于0或者180竖屏
    // 等于90或者-90度横屏
    _this.eventValue = event.orientation || 
        (screen.orientation && screen.orientation.angle)
}, false);


  1. 通过 orientationchange 事件来监听横竖屏的变化


  1. 通过 orientation 来获取当前屏幕的方向角度


  1. 兼容性比较差,https://www.caniuse.com/#sear...


方案二:resize判断宽高



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


window.addEventListener("resize", function(event) {
    _this.innerWidth = window.innerWidth
    _this.innerHeight = window.innerHeight
}, false);


  1. 通过 resize 事件来监听浏览器的宽高变化


  1. 通过比对宽高来判断当前横竖屏状态。


  1. 因为是移动端,所以键盘弹出的时候也会干扰。


  1. 兼容性当然是棒棒的。


方案三: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?'竖屏':'横屏'
    })
}


方案四:媒体查询



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

哈哈,这个方案是我在网上看到的,有可能是那个人不知道 matchMedia 这个 API


或者是 API 有兼容性问题,他自己搞了一个 hack 方法。

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

相关文章
|
Android开发
Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)
Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)
827 0
|
Ubuntu Android开发
Android ImageView 翻转 裁切 缩放
Android ImageView 翻转 裁切 缩放
273 0
Android ImageView 翻转 裁切 缩放
|
Android开发
Android Paint 抗锯齿画线模糊
Android Paint 抗锯齿画线模糊
263 0
Android Paint 抗锯齿画线模糊
|
Android开发
Android 设置图片的四个角 为圆角
Android 设置图片的四个角 为圆角
|
Go Android开发
|
传感器 XML Java
android横竖屏切换问题
android横竖屏切换问题
|
Android开发 数据格式 XML
Android 基础动画之 alpha 透明度 / translate 平移 / rotate 旋转
      小菜最近在学习 Android 基本动画,前两天整理了一下相对复杂的 Android 基础动画之 scale 渐变缩放,今天继续学习整理其他三种基本动画。 公共属性: 1. android:duration="3500"       duration 代表动画过程中持续时常;所有的动画均有该属性; 2. android:fillAfter="true"       fillAfter 代表动画结束后是否保存在最后位置,true 为结束位置,false 为返回开始位置。
1702 0
|
Android开发 容器 数据格式
Android 基础动画之 scale 渐变缩放
      小菜最近在学习 ViewPager 的小动画,说来惭愧,工作这么久了一直没有认真了解过动画这部分,今天特意学习一下 Android 的基本动画。       Android 的基本的动画包括 alpha(透明度)/ scale(缩放)/ translate(位移) / rotate(旋转)四种,小菜今天学习一下 scale 渐变缩放动画效果。
1424 0
|
Android开发
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸 实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:然后特意设置一个ImageView宽高均为600pix。
2145 0