我有这个小的HTML应用程序:



var hoi = document.getElementById('hoi')
var square = document.getElementById('box')
var player = {
	top: 10,
    r: 10
}
setInterval(function(){
	square.style.top = player.top + 'px';
    square.style.right = player.r + 'px;
},3000);
window.addEventListener('keydown', function(e){
	if(e.keyCode===83){
    player.top += 10;
  } else if(e.keyCode===87){
  	player.top -= 10;
  } else if(e.keyCode===68){
  	player.r -= 10;
  } else if(e.keyCode===65){
  	player.r += 10;
  }
})

body {
  background-color: #f41fff;
}

#box {
  background-color: black;
  border: solid black 1px;
  width: 50px;
  height: 50px;
  position: relative;
}

<h1 id='hoi'>HOI</h1>
<div id='box' class='box'></div>





但是当我运行它时,广场移动时滞后很大。它也无法横向移动。后来,当我编辑它时,它就停止了一起移动。我已经尝试了很多事情,例如更改setInterval函数的计时等。非常感谢您的帮助。

最佳答案

首先使用requestAnimationFrame,因为它比setInterval的动画平滑得多。

按照惯例,由于要使用笛卡尔坐标系,因此请使用x和y作为变量。另外,请检查您的控制台,因为您在px字符串中缺少右引号。

这是一个简约的版本,因此您可以了解我所做的事情以及您的错误所在。

https://jsfiddle.net/9tntp2qq/

var hoi = document.getElementById('hoi')
var square = document.getElementById('box')
var position = null;
var x = 0;

function animate() {
  if(position == 'right') {
    x += 1;
    square.style.left =  x + 'px';
  }

  requestAnimationFrame(animate)
}
animate();
window.addEventListener('keydown', function(e){
 if(e.keyCode) {
    position = 'right';
  }
})

关于javascript - 方形几乎不动(Javascript),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37094771/

10-12 12:22