网站上的美工图片要怎么做,wordpress外贸网店主题,淮安网站建设工作室,做网站业务的怎么寻找客户https://www.2cto.com/kf/201802/724174.html#xff08;copy#xff09; 也许有人会问#xff0c;小程序中都是竖直app形态#xff0c;要横竖屏判断有什么用?即使判断出了横屏状态#xff0c;你能把小程序横过来?答案是不能的#xff0c;但是判断当前设备处于横屏或者…https://www.2cto.com/kf/201802/724174.htmlcopy 也许有人会问小程序中都是竖直app形态要横竖屏判断有什么用?即使判断出了横屏状态你能把小程序横过来?答案是不能的但是判断当前设备处于横屏或者竖屏状态来实现一些友好的用户体验交互方式的需求确实存在。例如手机横屏让视频播放自动全屏手机竖屏让视频切换回来小屏。 然而截止至目前小程序官方的API中并没有提供这样的横竖屏判断的方法。那么我们只能自己想办法实现这样的判断。小程序的设备API中提供了加速度计的监听方法使用方法如下 wx.onAccelerometerChange(function(res) { console.log(res.x) console.log(res.y) console.log(res.z) }) 加速度计的三轴 以下是一般移动设备的加速度计三轴坐标系示例图 以手机竖直面向用户为例加速计的三轴坐标系统的X、Y、Z轴定义如下 沿着手机屏幕顶部向上是Y轴正方向向下是Y轴负方向; 当手机顶部朝上时沿着手机屏幕向右是X轴正方向向左是X轴负方向; 正对手机时垂直屏幕向外是Z轴正方向垂直屏幕向里是Z轴负方向; 当手机处于静止状态时手机此时只受一个重力加速度(1g9.8m/s²)的作用加速度计返回的res.x、res.y、res.z的值就是设备的三轴受到的加速度的值取值范围从[-1g,1g]。设备以不同方式放置时x/y/z的值如下 计算姿态角 在stackoverflow上找到了根据加速度计三轴的值计算姿态角公式经过结合设备的三轴坐标方向对公式进行调整最终得出了公式 Pitch atan2(Y, Z) * 180/M_PI;Roll atan2(-X, sqrt(Y*Y Z*Z)) * 180/M_PI; Roll atan2(-X, sqrt(Y*Y Z*Z)) * 180/M_PI; Roll(绕Y轴旋转的角度) 当设备绕着自身Y轴旋转时(表示手机左侧或右侧翘起的角度)该角度值将会发生变化取值范围是-90到90度。 Pitch(绕X轴旋转的角度) 当手机绕着自身的Y轴旋转(表示手机顶部或尾部翘起的角度)该角度会发生变化值的范围是-180到180度。 接下来就是根据自己对横竖屏角度的观测再结合微信小程序中视频全屏只能以手机向左旋转方式全屏的特性只对用户左侧横屏判断为横屏状态实现代码片段如下 // 0为竖屏1为横屏 let lastState 0; let lastTime Date.now(); wx.startAccelerometer(); wx.onAccelerometerChange((res) { const now Date.now(); // 500ms检测一次 if (now - lastTime 500) { return; } lastTime now; let nowState; // 57.3 180 / Math.PI const Roll Math.atan2(-res.x, Math.sqrt(res.y * res.y res.z * res.z)) * 57.3; const Pitch Math.atan2(res.y, res.z) * 57.3; // console.log(Roll: Roll, Pitch: Pitch) // 横屏状态 if (Roll 50) { if ((Pitch -180 Pitch -60) || (Pitch 130)) { nowState 1; } else { nowState lastState; } } else if ((Roll 0 Roll 30) || (Roll 0 Roll -30)) { let absPitch Math.abs(Pitch); // 如果手机平躺保持原状态不变40容错率 if ((absPitch 140 || absPitch 40)) { nowState lastState; } else if (Pitch 0) { /*收集竖向正立的情况*/ nowState 0; } else { nowState lastState; } } else { nowState lastState; } // 状态变化时触发 if (nowState ! lastState) { lastState nowState; if (nowState 1) { console.log(change:横屏); } else { console.log(change:竖屏); } } }); 然后就可以在横竖屏切换的状态下去切换视频的横竖屏了 if (state 1) { video.requestFullScreen(); } else { video.exitFullScreen(); } 其他 另外在这里发现小程序的一个小bug就是当进入一个页面马上就调用requestFullScreen()方法去拉起视频全屏时会破坏整个页面的布局并且再调用全屏方法时视频就无法再全屏了像这样 所以为了防止用户直接以横屏的状态进入一个视频播放页而我们的横屏判断检测生效立即触发全屏引发bug我将监听横竖屏的事件通过setTimeout(listener, 3000)延迟3s监听这样横屏才不会触发bug。转载于:https://www.cnblogs.com/dianzan/p/9668488.html