使用 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?

浅谈Javascript事件模拟

苹果iOS 11加强本地化:SafariiMessage都要改名

如何转换数据:image / webp,expo(或php)中的base64

H5移动端中必备技能

iPhone/iPad 是不是支持 mouseout 事件?