js实现匀速下落动画怎么实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现匀速下落动画怎么实现相关的知识,希望对你有一定的参考价值。

/*
data:2022-11-17
author:lfp
move运动函数
dom--需要运动的对象
json--width:100,height:100,left:100,top:100
callback--回调函数 可调用自己 实现异步动画效果
*/
//主函数
function move(dom,json,callback)
//让每一次动画都是新的开始,防止出现动画一直不停的运行
if(dom.timer)clearInterval(dom.timer);
var i=0;
var start=0;
//在对象中增加timer 便于控制他停止
dom.timer=setInterval(function()
i++;
//循环每一个目标属性添加动画方法
for(var attr in json)
//获取当前attr的属性值 已经去除了px 还有 如果初始值是auto 用零代替
var cur=getStyle(dom,attr);
if(i==1)start=cur;
//拿到该属性的目标值
var target=json[attr];
//设置分成10次增加增量 你可以根据需要修改
var speed=(target-start)/10;
console.log(speed+"====="+cur)
//如果没有达到目标值就一直加
if(Math.abs(cur-target)>1)
dom.style[attr]=cur+speed+"px";
else
//达到目标值了就停止或者其他情况也停止
clearInterval(dom.timer);
//等停止了动画再回调函数进行另外的操作
if(callback)callback.call(dom);
;
;
,45);
;
//配套函数
function getStyle(dom,attr)
var value="";
if(window.getComputedStyle)
value=window.getComputedStyle(dom,false)[attr];
else
value=dom.currentStyle[attr];
;
value=parseInt(value);
return value || 0;//如果你再样式中没有设置初始的值就会出现NaN 所以要用0来补充
;
function $(id)
//return document.getElementById(id);
return document.querySelector("#"+id);
;
参考技术A 建议直接使用jq的.animate() 设置绝对定位 控制top值就可以。也可以用css3的animation动画效果实现,原理也是控制top值。原生js也是同理使用计时器重复调用改变top值的方法,当top值等于某个值时停止计时器,完成动画效果。

js学习总结----动画之在指定时间内实现单方向匀速运动

具体代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        #box{
            position:absolute;
            top:0;
            left:0;
            padding:0;
            width:100px;
            height:100px;
            background:lightblue;

        }
    </style>
</head>
<body>
    <div id=‘box‘></div>
    <script>
        //思想1:
        var oBox = document.getElementById(‘box‘);
        //实现一个匀速运动:在指定时间内完成动画:计算出总距离/总时间,然后求出对应的步长(每10ms走一步的话需要走多远)
        var maxLeft = (document.documentElement.clientWidth || document.body.clientWidth) - oBox.offsetWidth;
        var duration = 2000;
        var step = (maxLeft/duration)*10;
        var timer = window.setInterval(function(){
            var curLeft = utils.css(oBox,"left");
            curLeft+=step;
            if(curLeft>=maxLeft){
                window.clearInterval(timer);
                return;
            }
            utils.css(oBox,"left",curLeft);
        },10)

        //思想2:
        function Linear(t,b,c,d){//相对应的是time begin change duration
            return c*t/d+b
        }
        var oBox = document.getElementById(‘box‘);
        var target = (document.documentElement.clientWidth || document.body.clientWidth) - oBox.offsetWidth;
        var begin = utils.css(oBox,‘left‘),change = target-begin;
        var duration = 2000,time = null;
        var timer = window.setInterval(function(){
            time+=10;
            if(time>=duration){
                utils.css(oBox,"left",target);
                window.clearInterval(timer);
                return;
            }
            var curPos = Linear(time,begin,change,duration);
            utils.css(oBox,"left",curPos)

        },10)

    </script>
</body>
</html>

 

以上是关于js实现匀速下落动画怎么实现的主要内容,如果未能解决你的问题,请参考以下文章

js学习总结----动画之在指定时间内实现单方向匀速运动

JavaScript动画:offset和匀速动画详解(含轮播图的实现)

求一个h5实现多个气球下落时 点击气球 气泡爆裂的js/jquery代码

js动画学习

JS动画之速度动画和透明度变化

canvas浅谈 实现简单的自旋转下落