使用 Javascript 在 iOS Safari 中检测抖动?
Posted
技术标签:
【中文标题】使用 Javascript 在 iOS Safari 中检测抖动?【英文标题】:Detect a shake in iOS Safari with Javascript? 【发布时间】:2010-12-17 22:12:18 【问题描述】:如何利用新的 MobileSafari 设备动作 API 来捕捉“摇晃”事件?
【问题讨论】:
【参考方案1】:查看这篇很棒的博文:http://www.jeffreyharrell.com/blog/2010/11/creating-a-shake-event-in-mobile-safari/
这说明了这个例子:
if (typeof window.DeviceMotionEvent != 'undefined')
// Shake sensitivity (a lower number is more)
var sensitivity = 20;
// Position variables
var x1 = 0, y1 = 0, z1 = 0, x2 = 0, y2 = 0, z2 = 0;
// Listen to motion events and update the position
window.addEventListener('devicemotion', function (e)
x1 = e.accelerationIncludingGravity.x;
y1 = e.accelerationIncludingGravity.y;
z1 = e.accelerationIncludingGravity.z;
, false);
// Periodically check the position and fire
// if the change is greater than the sensitivity
setInterval(function ()
var change = Math.abs(x1-x2+y1-y2+z1-z2);
if (change > sensitivity)
alert('Shake!');
// Update new position
x2 = x1;
y2 = y1;
z2 = z1;
, 150);
【讨论】:
优秀。感谢您添加代码提取。应该有帮助! 只是一个警告:accelerationIncludingGravity 永远不会使所有三个分量都为零。如果重力直接作用在一个轴上,则该轴的值为 9.81。另外,为什么不在活动期间而不是在间隔期间检查震动? @Jacob Relkin 我意识到在我的 iPhone 4S 上,一次摇晃后警报会发生两次。为什么? @andi 我唯一的改变是摆脱了间隔,而是将代码放在事件处理程序中。现在想一想,这可能效果不佳,因为如果使用许多事件,更改可能会显得更慢。至于双重提醒:当你开始摇晃和停止时会有变化,所以你会得到一个提醒。 链接的博文已被删除。它是否可以在其他地方看到,或者有没有我可以阅读的类似文章?以上是关于使用 Javascript 在 iOS Safari 中检测抖动?的主要内容,如果未能解决你的问题,请参考以下文章
如何调试在 iPad 上的 web 视图中运行的 Javascript?
苹果iOS 11加强本地化:SafariiMessage都要改名