javascript - 如何让这个 Action 更长而不停顿

标签 javascript jquery

如果我想移动一个方 block ,我已经有了这段代码,它可以完美地工作,但是当我按住该键时,动画将起作用,但会出现这些暂停。我发现乘以速度和距离是可行的,但我不知道如何将这个“实时”添加到动画中。你能给我一些建议吗?

var Xpos = 0;
var Ypos = 0;
var spd = 250;
var dstnc = 100;

$(document).keydown(function(e) {
  if (e.keyCode == 87) {
    $('#movThs').animate({
      top: -dstnc + Ypos + 'px'
    }, spd);
    Ypos = Ypos - dstnc;
  }
  if (e.keyCode == 68) {
    $('#movThs').animate({
      left: dstnc + Xpos + 'px'
    }, spd);
    Xpos = Xpos + dstnc;
  }
  if (e.keyCode == 83) {
    $('#movThs').animate({
      top: dstnc + Ypos + 'px'
    }, spd);
    Ypos = Ypos + dstnc;
  }
  if (e.keyCode == 65) {
    $('#movThs').animate({
      left: -dstnc + Xpos + 'px'
    }, spd);
    Xpos = Xpos - dstnc;
  }
});
#movThs {
  background-color: #ff0000;
  width: 100px;
  height: 100px;
  position: relative;
  border-radius: 90%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="movThs"></div>

最佳答案

我不确定您希望实现的确切缓动行为,但让事情变得更顺畅的一个方便提示是在重新设置动画之前 stop()

最终以非离散定位结束;使用 stop(),您现在可以处于两个位置之间,这可能不是您想要的。它的作用是防止动画队列建立(不牺牲原始的平滑度)。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
  #movThs {
    background-color: #ff0000;
    width: 100px;
    height: 100px;
    position: relative;
    border-radius: 90%;
  }
</style>

<div id="movThs"></div>
<script>
  var Xpos = 0;
  var Ypos = 0;
  var spd = 250;
  var dstnc = 100;

  $(document).keydown(function(e) {
    if (e.keyCode == 87) {
      $('#movThs').stop().animate({
        top: -dstnc + Ypos + 'px'
      }, spd);
      Ypos = Ypos - dstnc;
    }
    if (e.keyCode == 68) {
      $('#movThs').stop().animate({
        left: dstnc + Xpos + 'px'
      }, spd);
      Xpos = Xpos + dstnc;
    }
    if (e.keyCode == 83) {
      $('#movThs').stop().animate({
        top: dstnc + Ypos + 'px'
      }, spd);
      Ypos = Ypos + dstnc;
    }
    if (e.keyCode == 65) {
      $('#movThs').stop().animate({
        left: -dstnc + Xpos + 'px'
      }, spd);
      Xpos = Xpos - dstnc;
    }
  });
</script>

关于javascript - 如何让这个 Action 更长而不停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60514842/

相关文章:

javascript - 传单工具提示不会正确动画

javascript - 使用 .on() 绑定(bind)时如何获取对父级的引用

javascript - 如何检查 JQuery 中是否存在某个元素?

javascript - 使用纯 JS 对 getJson 进行排序 - 无插件

javascript - Rails 3.2 + jQuery + js.erb 中的部分渲染 = HTML 元素损坏

jQuery Slice 函数/每对两个

jquery - CSS和jquery优先级问题

javascript - 如何在 Next 和 Prev 按钮时水平滚动托盘?

Javascript - 除非我警告(),否则更改图像将不起作用

JavaScript 循环变量作用域