【问题标题】:Change background image in mobile when device motion is changed更改设备运动时更改移动设备中的背景图像
【发布时间】:2021-12-30 06:29:09
【问题描述】:

我正在尝试在移动设备运动发生变化时更改背景图像(例如您将设备设置为顶部、左侧或右侧,或上下移动)。我正在使用此代码,问题是它立即开始工作,即使我不手动改变设备的运动。它总是在循环中不断更新。

当我稍微向右或向左或向下改变移动设备时,我想要什么,它应该改变图像而不是知道如何让它工作:

window.addEventListener("devicemotion", function(event){
        if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
        {
            var myImages = new Array("victoria_bg.png", "victoria_bg_2.png", "victoria_bg_3.png", "victoria_bg_4.png");
            var random = myImages[Math.floor(Math.random() * myImages.length)];
            random = 'url(<?php echo base_url();?>resources/mobile/images/' + random + ')';
        } 
    });

【问题讨论】:

  • devicemotion 事件定期触发 - 所以它不是像click 这样的传统事件,而是不断触发。您需要存储上一个事件的值并进行比较以查看它是否已更改。
  • @freedomn-m 你能写下代码吗?我是 jquery 的新手

标签: jquery devicemotion


【解决方案1】:

来自MDN

devicemotion 事件定期触发

所以它不是像click 这样的传统事件,而是不断触发。您需要存储上一个事件的值并进行比较以查看它是否已更改。

由于提供 alpha/beta/gamma 的方式,您可能需要一些容忍度。测试返回的确切值以确定您的场景需要多少容差/灵敏度。

这是一个例子:

var prevAlpha = 0.0;
var prevBeta = 0.0;
var prevGamma = 0.0;

window.addEventListener("devicemotion", function(event){
    if (event.rotationRate.alpha < (prevAlpha - 0.5) 
       || event.rotationRate.alpha > (prevAlpha + 0.5)
       || event.rotationRate.beta < (prevBeta - 0.5) 
       || event.rotationRate.beta > (prevBeta + 0.5)
       || event.rotationRate.gamma < (prevGamma - 0.5) 
       || event.rotationRate.gamma > (prevGamma + 0.5))
    {
        prevAlpha = event.rotationRate.alpha;
        prevBeta = event.rotationRate.beta;
        prevGamma = event.rotationRate.gamma;

        ... code to run on a change
    } 
});

(显然可以使用对象/命名空间/范围来减少全局变量)

【讨论】:

  • 我确实尝试过这段代码,即使设备是静止的并且没有移动,它仍然会改变背景。请告诉我如何处理这个
  • 您可能需要添加一些“容差”而不是直接比较,例如event.rotationRate.alpha &lt; (prevAlpha - 0.5) || event.rotationRate.alpha &gt; (prevAlpha + 0.5),您需要每次查看值是多少,以确定添加多少容差。
  • 是的,这个正在工作,更新你对这个新行的答案,这样我就可以投票并将其标记为接受
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多