实现JS div匀速移动动画与变速移动动画
JS div匀速移动动画与变速移动动画
JS实现div匀速移动动画可以使用setInterval函数,每隔一定时间改变div的left或top属性值,使其移动一定的距离。
JS实现div变速移动动画可以使用requestAnimationFrame函数,根据时间的流逝计算出div应该移动的距离,并使用CSS3的transition属性实现平滑的动画效果。也可以使用Tween.js等库来实现更加复杂的动画效果。
window.onscroll = function() {
//检测鼠标滚轮距离顶部位置
var top = document.documentElement.scrollTop || document.body.scrollTop;
console.log(top);//页面滚动时可以得到滚动的距离可以根据这个数值来决定何时给div绑定动画
//要设置到DIV刚显示出来时给div添加动画
if(top > (box.offsetTop-box.offsetHeight)) {
box.style.animation = "key 2s"//添加动画
}
}
可以使用JS的requestAnimationFrame()函数来实现一个div在网页中匀速移动的动画效果。requestAnimationFrame()函数是 browser API 中的一部分,其可以帮助实现流畅的动画效果,通过在每一帧之间添加延迟来平衡计算和渲染。以下是一个实现div匀速移动动画的示例代码:
HTML代码:
<div id="myDiv" style="position:absolute;top:20px;left:20px;width:100px;height:100px;background-color:red;"></div>
JS代码:
var div = document.getElementById("myDiv");
var pos = 0;
var speed = 3;
function move() {
pos += speed;
div.style.left = pos + "px";
requestAnimationFrame(move);
}
move();
上述代码中,我们首先获取了一个id为“myDiv”的div元素,然后通过一个pos变量来跟踪该元素的位置。在move()函数中,我们将pos变量增加了一个速度speed,然后设置div元素的left样式属性等于该变量的值。最后,我们使用requestAnimationFrame()函数来周期性地调用move()函数实现匀速移动效果。
如果想要实现变速移动效果,可以使用ease-in和ease-out CSS动画效果结合JS代码来实现。以下是一个实现这个效果的示例代码:
HTML代码:
<div id="myDiv" style="position:absolute;top:20px;left:20px;width:100px;height:100px;background-color:red;"></div>
CSS代码:
#myDiv {
transition: left 2s ease-in-out;
}
JS代码:
var div = document.getElementById("myDiv");
var pos = 0;
var speed = 1;
var maxSpeed = 10;
function move() {
pos += speed;
div.style.left = pos + "px";
if (speed < maxSpeed) {
speed += 1;
}
requestAnimationFrame(move);
}
move();
上述代码中,我们首先设置了div元素的transition属性,从而实现了ease-in-out效果。在move()函数中,我们将pos变量增加了速度speed,并设置div元素的left样式属性等于该变量的值。同时,我们还增加了一个maxSpeed变量,该变量指定了最大速度。在每一帧之间,我们通过if语句检查速度是否小于最大速度,如果小于,则逐渐增加速度。最后,我们使用requestAnimationFrame()函数来周期性地调用move()函数实现变速移动效果。