【问题标题】:Dynamically moving element position using Javascript使用Javascript动态移动元素位置
【发布时间】:2020-01-16 06:31:31
【问题描述】:

这是我的密码笔:https://codepen.io/apasric4/pen/qBWyqqb

这是导致我出现问题的代码:

const moveBlock=()=> {
  let x=myBlock.offsetLeft;
  let y=myBlock.offsetTop;
  keyArray.forEach(key=> {
    if (key==='ArrowRight') {
      myBlock.style.left=`${x+50}px`
    } else if (key==='ArrowLeft') {
      myBlock.style.left=`${x-50}px`
    } else if (key==='ArrowDown') {
      myBlock.style.top=`${y+50}px`
    } else if (key==='ArrowUp') {
      myBlock.style.top=`${y-50}px`
    }
  })
}

我将简要解释一下我的程序:

程序将启动您按左、右、上或下 - 这些命令显示为文档顶部的列表。然后按回车

当按下回车键时,程序会遍历键盘方向数组,块根据数组中的命令向指定方向移动。每个箭头方向都有一个条件,可以将块移动 50 像素。这是一个序列,所以我们应该看到发生。

但是,该块仅向右或向左移动 50px 等,仅移动一次。这是为什么?我没有正确迭代我的 x 和 y 变量吗?

【问题讨论】:

    标签: javascript css keyboard position keycode


    【解决方案1】:

    移动一次后必须再次计算xy的值。 因为当您从第二次移动块时,您只是使用在 for 循环开始之前计算的 xy 的原始值。

    将此添加到您的 forEach() 方法中。

     x = myBlock.offsetLeft;
     y = myBlock.offsetTop; 
    

    您后来在 cmets 中提到了每次移动之间的延迟。 您可以通过创建另一个动画块函数、在循环中设置超时并在超时时调用该动画块函数来做到这一点。

    const animateBlock = (key)=> {
        let x = myBlock.offsetLeft;
        let y = myBlock.offsetTop;
    
        if (key === 'ArrowRight') {
          myBlock.style.left = `${x + 50}px`
        } else if (key === 'ArrowLeft') {
          myBlock.style.left = `${x - 50}px`
        } else if (key === 'ArrowDown') {
          myBlock.style.top = `${y + 50}px`
        } else if (key === 'ArrowUp') {
          myBlock.style.top = `${y - 50}px`
        }
    }
    
    
    const moveBlock = () => { 
      keyArray.forEach((key, i) => {
         setTimeout(() => {
           animateBlock(key);
         }, i * 1000);
      })
    }
    

    工作演示: https://codepen.io/nikhilmopidevi/pen/gOYjgYd

    【讨论】:

    • 您好,我测试过了,但方块还是不动?
    • 我希望方块在阵列中的每个方向上作为一系列运动进行移动。
    • @Bob - 我可以看到方块在移动,按照移动的确切顺序。你有没有查看我的 CodePen:codepen.io/nikhilmopidevi/pen/mdbjOBB
    • 我做到了。当我在文档顶部添加了所有箭头方向后按 ENTER 时,块并没有真正移动?它只移动一次?它不会朝一堆方向移动。当您按一次 ENTER 时,它应该在数组中的所有给定方向上移动
    • @Bob - 我可以在我的 CodePen 中清楚地看到块在多个方向上移动:codepen.io/nikhilmopidevi/pen/mdbjOBB。按三次右箭头,然后按回车,您应该看到块向右移动了三步。您还应该记住,路线会被取消,right 会被 left 取消,top 会被 bottom 取消。因此,两个rights 和一个left 最终只是将块移动到right
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 2018-04-22
    • 2011-12-17
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多