我该如何禁用事件监听器?或者有一个停止按钮来停止它的功能?

4

请帮我添加一个按钮,用于停止、暂停或禁用加速度计功能?以下是我的代码,谢谢。

加速度计读数

<script>

function init() {

  var accelerometer = document.getElementById('accelerometer');

  if(window.DeviceMotionEvent) {

  window.addEventListener('devicemotion', function(event) {

  var x = parseInt(event.accelerationIncludingGravity.x);

  var y = parseInt(event.accelerationIncludingGravity.y);

  var z = parseInt(event.accelerationIncludingGravity.z);

  var acce = 'Acceleration:<br />';

  acce += 'x: ' + x +'<br />y: ' + y + '<br />z: ' + z + ;

  accelerometer.innerHTML = acce;

     });
  }
}
</script>
2个回答

2

方法1:不要使用匿名函数作为监听器:将其分配给一个变量,以便可以将其传递给removeEventListener

方法2:不要删除监听器;相反,设置一个标志来确定它是否处于活动状态。如果在监听器的顶部它不是活动的,则返回而不产生任何影响。


1
先生,您能给我一个完整的代码吗?因为我是 JavaScript 的新手,所以我真的很难修复它。谢谢。 - Ronnel.D

2
提供一个具名的函数引用给.addEventListener(),然后在.removeEventListener()中使用该函数的名称。
function handleAccelerationEvent(event) {

  var x = parseInt(event.accelerationIncludingGravity.x);

  var y = parseInt(event.accelerationIncludingGravity.y);

  var z = parseInt(event.accelerationIncludingGravity.z);

  var acce = 'Acceleration:<br />';

  acce += 'x: ' + x +'<br />y: ' + y + '<br />z: ' + z + ;

  accelerometer.innerHTML = acce;

}

function init() {

  var accelerometer = document.getElementById('accelerometer');

  if(window.DeviceMotionEvent) {

    window.addEventListener('devicemotion', handleAccelerationEvent);
  }
}

// remove `devicemotion` event referencing `handleAccelerationEvent` function
window.removeEventListener("devicemotion", handleAccelerationEvent)

先生,您能给我一个完整的代码吗?因为我是 JavaScript 的新手,所以我真的很难修复它。谢谢。 - Ronnel.D
@Ronnel.D "我该如何禁用事件监听器?或者为其功能添加一个停止按钮?" <button id="stop">移除设备运动事件</button><script>function removeDeviceMotionEvent() {window.removeEventListener("devicemotion", handleAccelerationEvent)};document.getElementById("stop").addEventListener("click", removeDeviceMotionEvent)</script> - guest271314
先生,您能否提供您的FB账户或Gmail给我,这样我们可以更好地交流。同时,我也可以附上一些图片让您查看。 - Ronnel.D
原问题是:“我该如何禁用事件监听器?我的加速度计读数正在工作。然后我尝试了您的停止代码,但它没有起作用。” - Ronnel.D
@Ronnel.D 页面应该在https:协议下加载,如果在http:下加载,则会在console中记录此消息:“The devicemotion event is deprecated on insecure origins, and support will be removed in the future. You should consider switching your application to a secure origin, such as HTTPS. See goo.gl/rStTGz for more details.”。此外,在版本1的http://plnkr.co/edit/rdEMawUY86hws4fhdfqn?p=preview中未设置`accelerometer.innerHTML`。请参见同一链接的版本3。 - guest271314
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接