![](/img/trans.png)
[英]How do i make 'useState' transition smoother using Tailwind CSS
[英]How do I make css offset smoother with Javascript?
我有一个使用位置属性和javascript的播放器控制器,但它有点活泼。 我该怎么办?
我尝试制作一个无限循环然后添加一个时间来减慢它到客户端的计算机帧,但它只输出相同的结果,snappy。 另外,我在Atom中写了这个,我在Google Chrome Web浏览器上编译了它。
使用Javascript
var player = document.getElementById('Player');
var ctx = player.getContext("2d");
var playerXPos = 0;
var playerYPos = 0;
var playerSpeed = 5;
ctx.fillStyle = "Red";
ctx.fillRect(0,0,50,50);
function animate(key) {
if (key.keyCode == 39) { //Right Arrow
playerXPos += playerSpeed;
player.style.left = playerXPos + "px";
}
if (key.keyCode == 37) { //Left Arrow
playerXPos -= playerSpeed;
player.style.left = playerXPos + "px";
}
if (key.keyCode == 38) { //Up Arrow
playerYPos -= playerSpeed;
player.style.top = playerYPos + "px";
}
if (key.keyCode == 40) { //Down Arrow
playerYPos += playerSpeed;
player.style.top = playerYPos + "px";
}
else {
return false;
}
}
document.onkeydown = animate;
HTML部分 (lol html不是编程语言,但无论如何)
<!DOCTYPE html>
<html>
<head>
<title>Player Test</title>
<style>
#Player {
position: relative;
}
</style>
<body>
<canvas id="Player"></canvas>
<script src="App/playerController.js" type="text/javascript"></script>
</body>
</html>
我希望它顺利。 我想我应该使用线性代数,但我不是在javascript方面的进步。 我其实是初学者。
您可以使用CSS transition属性来获得更平滑的效果。 您需要在CSS中设置元素的初始顶部和左侧位置,因为这些是您使用JS更改的属性。 我已将动画设置为持续0.5秒,但可以根据您的喜好将其调整为更快或更慢:
var player = document.getElementById('Player'); var ctx = player.getContext("2d"); var playerXPos = 0; var playerYPos = 0; var playerSpeed = 5; ctx.fillStyle = "Red"; ctx.fillRect(0, 0, 50, 50); function animate(key) { if (key.keyCode == 39) { //Right Arrow playerXPos += playerSpeed; player.style.left = playerXPos + "px"; } if (key.keyCode == 37) { //Left Arrow playerXPos -= playerSpeed; player.style.left = playerXPos + "px"; } if (key.keyCode == 38) { //Up Arrow playerYPos -= playerSpeed; player.style.top = playerYPos + "px"; } if (key.keyCode == 40) { //Down Arrow playerYPos += playerSpeed; player.style.top = playerYPos + "px"; } else { return false; } } document.onkeydown = animate;
#Player { position: relative; left: 0; top: 0; -webkit-transition: all 0.5s; /* For Safari 3.1 to 6.0 */ transition: all 0.5s; }
<canvas id="Player"></canvas>
你可以试试这个:
var player = document.getElementById('Player');
var ctx = player.getContext("2d");
var playerXPos = 0;
var playerYPos = 0;
var playerXSpeed = 0;
var playerYSpeed = 0;
ctx.fillStyle = "Red";
ctx.fillRect(0,0,50,50);
setInterval(function(){
playerXPos += playerXSpeed;
player.style.left = playerXPos + "px";
playerYPos += playerYSpeed;
player.style.top = playerYPos + "px";
},5)
function animate(event) {
let x = event.which || event.keyCode
switch (x) {
case 39://Right Arrow
playerXSpeed = 1
break
case 37://Left Arrow
playerXSpeed = -1
break
case 38://Up Arrow
playerYSpeed = -1;
break
case 40://Down Arrow
playerYSpeed = 1;
break
}
}
document.onkeydown = animate;
document.onkeyup = function(){
let x = event.which || event.keyCode
switch (x) {
case 39://Right Arrow
case 37://Left Arrow
playerXSpeed = 0
break
case 38://Up Arrow
case 40://Down Arrow
playerYSpeed = 0;
break
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.