使用Java Script来回移动一个元素的对角线。

问题描述 投票:2回答:1

我想让我的div元素在一个容器内无限地来回移动,目标是只使用Java脚本,不使用CSS动画,jQuery等。目标是只使用Java脚本,不使用CSS动画,jQuery等。

const container = document.getElementById('container');
const box = document.getElementById('box');
let t = setInterval(move, 1);
let pos = 1;

function move() {
    box.style.left = pos + 'px';
    box.style.top = pos + 'px';
    pos++;
    if (pos === 150) {
        clearInterval(t)
    }


}
#container{
    width: 200px;
    height: 200px;
    background-color: green;
    position: relative;
}

#box{
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    animation-direction: alternate;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Animation</title>
    <link href="animation.css" rel="stylesheet">
    <script defer src="animation.js"></script>
</head>
<body>
<div id="container">
    <div id="box"></div>
</div>

</body>
</html>

所以这里是代码。正如你所看到的,我使用position relativeabsolute来让元素在setInterval函数中移动。但是当我试图把它反转到 "它的角落 "时,它就不能工作了。说实话,我已经尝试了一些东西,但我真的找不到不使用任何其他工具的解决方案。先谢谢你了。

javascript html css
1个回答
3
投票

你需要像下面这样考虑一个布尔变量来增加或减少数值。

const container = document.getElementById('container');
const box = document.getElementById('box');
let t = setInterval(move, 1);
let pos = 1;
let test = true;

function move() {
  box.style.left = pos + 'px';
  box.style.top = pos + 'px';
  
  if (test)
    pos++; /* move down */
  else
    pos--; /* move up */
    
  /* update the direction when you reach the top or bottom limit*/  
  if (pos >= 150) 
    test = false 
  else if (pos <= 0) 
    test = true;
}
#container {
  width: 200px;
  height: 200px;
  background-color: green;
  position: relative;
}

#box {
  width: 50px;
  height: 50px;
  background-color: red;
  position: absolute;
}
<div id="container">
  <div id="box"></div>
</div>

3
投票

一个替代方法可以得到同样的结果

const box = document.getElementById('box');
let jump = 1;
let pos = 0;
window.setInterval(() => {
  pos = pos + jump;
  if (pos > 150 || pos < 0) {
    jump = jump * (-1);
  }
  box.style.left = pos + 'px';
  box.style.top = pos + 'px';
}, 1);
#container{
    width: 200px;
    height: 200px;
    background-color: green;
    position: relative;
}

#box{
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    animation-direction: alternate;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Animation</title>
    <link href="animation.css" rel="stylesheet">
    <script defer src="animation.js"></script>
</head>
<body>
<div id="container">
    <div id="box"></div>
</div>

</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.