使用 html ,css, js 使元素落到页面上

Make an element falling down to the page using html ,css, js

我想让网格元素落到页面上。我使用 setInterval 来重复这个过程(底部会降低,所以网格会下降)。我想我没有创建 move() 函数 correctly.I 只是想知道如何正确设置该函数。

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel= "stylesheet" href ="style.css"></link>
</head>
<body>
    <div class="grid"></div>
    <script src="javascript.js" ></script>
</body>                                                      
</html>
.grid {
    background-color:blue;
    height: 20px;
    width :100px;
    left:600px;
    top:150px;
    position : absolute;
}
var grid =document.querySelector('.grid');

function move () {
    grid.style.bottom-=4;
    grid.style.bottom=grid.bottom +'px';
}

move();
setInterval(move,30);

我建议您为此使用 CSS animation,您不需要 JavaScript。

.grid {
  background-color: blue;
  height: 20px;
  width: 100px;
  left: 100px;
  position: absolute;
  animation: move 1.5s forwards;
}

@keyframes move {
  from {
    bottom: 200px;
  }
  to {
    bottom: 0;
  }
}
<body>
  <div class="grid"></div>
</body>

如果您仍想实施您的方法来实现此运动,请在此处提供一些反馈。

底部值为字符串,不是数字(例如 300px 与 300)

如果你想操纵一个元素的底值,你必须先解析数值,然后改变它,然后附加一个'px'(或你使用的任何单位)。

// grid.style.bottom-=4; // subtraction on strings is not allowed
// instead, use:
const currentBottom = parseInt(grid.style.bottom, 10)
grid.style.bottom = (currentBottom - 4) + 'px'

document.getElementById(...).style 缺少来自 <style> 块和样式表的样式

如果你想得到一个DOM元素的所有当前样式,你应该使用window.getComputedStyle。如文档中所述:

getComputedStyle is read-only, and should be used to inspect the element's style — including those set by a element or an external stylesheet

在下面的代码片段中,您可以查看并比较值 grid.style.bottomwindow.getComputedStyle(grid)。起初,第一个版本是空的,但第二个版本具有样式表中的预期值。

或者,您可以直接将样式 in-line 应用于 HTML 元素。然后您也可以使用 .style 从头开始​​访问正确的值。

<div class="grid" style="bottom: 100px"></div>

为了更好地理解,请延迟 3 秒查看下面代码段的固定版本。

var grid = document.querySelector('.grid');

function move() {
  const style = grid.style.bottom
  const computedStyle = window.getComputedStyle(grid)

  console.log('bottom', style)
  console.log('bottom from computed style', computedStyle.bottom)

  // grid.style.bottom -= 4;
  // grid.style.bottom = grid.bottom + 'px';

  const newBottom = parseInt(computedStyle.bottom, 10) - 4; // parseInt only reads the numeric value from the bottom string
  grid.style.bottom = newBottom + 'px';
}

move();
setInterval(move, 3000);
.grid {
  background-color: blue;
  height: 20px;
  width: 100px;
  left: 100px;
  bottom: 200px;
  position: absolute;
}
<div class="grid"></div>