【问题标题】:How to add a touch event (right, left and down at the screen) in javascript?如何在javascript中添加触摸事件(屏幕上的右、左和下)?
【发布时间】:2018-07-11 19:52:18
【问题描述】:

我正在学习 js 并制作俄罗斯方块游戏。我已经在 PC 配置中做到了,但我想在移动配置上的游戏作品中添加一些触摸事件。但我被困在这个:

function touchEnd(e) {
        if (Math.abs(offset[0]) > Math.abs(offset[1])) {
            playerMove(-1);
        }
        else if (Math.abs(offset[0]) < Math.abs(offset[1])) {
            playerDrop();
        }
}

(我在上面的代码中遇到了问题)

我的想法是当玩家触摸(而不是拖动)屏幕(画布)左侧时,playerMove(-1) 起作用,当您触摸右侧时,playerMove(1); 起作用,当您触摸底部时在屏幕上,playerDrop() 有效。我怎样才能做到这一点?谢谢。

【问题讨论】:

标签: javascript canvas mobile touch tetris


【解决方案1】:

这是一个关于如何拆分 HTMLElement 并基于它发送操作的示例

let box; 

document.addEventListener('DOMContentLoaded', ()=>{
  box = document.querySelector('#test');
  box.addEventListener('click', chooseSide);
});

function chooseSide(e){
  const {clientX, clientY} = e;
  const {clientHeight, clientWidth} = box
  if(clientY > (clientHeight/ 2)){
    console.log('bottom')
  }else if(clientX < (clientWidth/ 2)){
    console.log('left')
  } else{
    console.log('right')
  }
}
#test {
  box-sizing: border-box;
  width: 100vmin;
  height: 100vmin;
  border: 10px solid #f00;
}
&lt;canvas id="test"&gt;&lt;/canvas&gt;

您可以更改 Y 比较的值,并为“底部”提供更多或更少的空间

【讨论】:

  • 行box.addEventListener('click', chooseSide);它说“无法读取 null 的属性 'addEventListener'”。怎么了?
  • 您是在加载 html 元素之前加载脚本吗?此外,您需要更改框选择器以匹配您的画布,例如 const box = document.querySelector('.my-canvas');
  • 是的,我是用 window.onload 函数做到的(只是在你的脚本上,也许问题出在那个),我改变了画布,但错误仍然存​​在
  • 我将添加一个编辑以向您显示画布并在加载后添加它,您可以现在检查,如果没有,请告诉我您的实现
  • 谢谢!现在它在移动设备上完美运行,但由于某种原因,左侧点击在我的 PC 浏览器上不起作用。有什么想法吗?
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 2016-11-20
  • 2023-04-05
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多