gpt4 book ai didi

javascript - 几秒钟后,我自动生成的 "dots"粘在屏幕底部

转载 作者:行者123 更新时间:2023-11-30 15:32:53 25 4
gpt4 key购买 nike

所以我有这个网站 ( http://mc.wordquest.nl/green/dots.html ),我想让点从页面底部漂浮到空中。在最初的几秒钟内,它工作正常。但是在一秒或五秒之后,这些点留在了它们的位置上。 Click here for the picture (of the problem)

这些点应该 float 到页面底部上方 100 像素处。我通过使用 CSS 动画来做到这一点(也许不是最好的做事方式,但我可以使用它......)。

我在页面中使用的代码:

		window.setInterval(function() {
randomSquare();
}, 100);

var i = 0;

function randomSquare() {

//Set window height
var w = window.innerWidth;
var h = window.innerHeight;


//Set dot x-position
var x = Math.floor((Math.random() * w) + 1);
var y = Math.floor((Math.random() * h) + 1);

// Add a dot to follow the cursor
dot = document.createElement('div');
dot.className = "dot";
dot.style.left = x + "px";
dot.style.bottom = 10 + "px";

i++;

//Random color
var COLOURS = ['#69D2E7', '#A7DBD8', '#E0E4CC', '#F38630', '#FA6900', '#FF4E50', '#F9D423'];
// var color = "blue";
var color = COLOURS[Math.floor(Math.random() * COLOURS.length)];

dot.style.backgroundColor = color;

if (y < h * 0.97 && x < w * 0.97) {
document.body.appendChild(dot);
}
};
		body {
height: 80%;
width: 90%;
font-family: Arial;
font-weight: Bold;
}

.dot {
width: 20px;
height: 20px;
background-color: green;
position: absolute;
color: white;
z-index: 1px;
border-radius: 50%;
animation: dots 2s linear;
}

@keyframes dots {
0% {
width: 20px;
height: 20px;
opacity: 1;
bottom: 0px;
}
100% {
/* opacity: 0; */
width: 0px;
height: 0px;
bottom: 100px;
}
}
<!DOCTYPE html>
<html>

<head>
<title>Test</title>
<style>
</style>
</head>

<body>

</body>

</html>

最佳答案

问题是在达到 100% 后,您在关键帧中定义的属性将不会继续应用于您的动画。为此,您需要设置 animation-fill-mode: forwards;。更重要的是,请务必注意您正在向 DOM 中无限添加元素。那就是内存泄漏。相反,一段时间后(动画完成)您应该删除该元素。 (或者可能有固定数量的点,并重新使用它们)考虑以下代码片段,注意有

setTimeout(function(){
dot.remove();
}, 2000)

此外,您忘记将 var 关键字添加到 dot 变量,使其成为全局变量。

window.setInterval(function() {
randomSquare();
}, 100);

var i = 0;

function randomSquare() {

//Set window height
var w = window.innerWidth;
var h = window.innerHeight;


//Set dot x-position
var x = Math.floor((Math.random() * w) + 1);
var y = Math.floor((Math.random() * h) + 1);

// Add a dot to follow the cursor
var dot = document.createElement('div');
dot.className = "dot";
dot.style.left = x + "px";
dot.style.bottom = 10 + "px";

i++;

//Random color
var COLOURS = ['#69D2E7', '#A7DBD8', '#E0E4CC', '#F38630', '#FA6900', '#FF4E50', '#F9D423'];
// var color = "blue";
var color = COLOURS[Math.floor(Math.random() * COLOURS.length)];

dot.style.backgroundColor = color;

if (y < h * 0.97 && x < w * 0.97) {
document.body.appendChild(dot);
}

setTimeout(function(){
dot.remove();
}, 2000)
};
body {
height: 80%;
width: 90%;
font-family: Arial;
font-weight: Bold;
}

.dot {
width: 20px;
height: 20px;
background-color: green;
position: absolute;
color: white;
z-index: 1px;
border-radius: 50%;
animation: dots 2s linear;
-webkit-animation-iteration-count: 1;
animation-fill-mode: forwards;
}

@keyframes dots {
0% {
width: 20px;
height: 20px;
opacity: 1;
bottom: 0px;
}
100% {
width: 0px;
height: 0px;
bottom: 100px;
}
}
<!DOCTYPE html>
<html>

<head>
<title>Test</title>


</body>

</html>

关于javascript - 几秒钟后,我自动生成的 "dots"粘在屏幕底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com