10
2019
02

js往复运动

往复运动相当于加减速运动的升级版。元素先加速后减速,当减速到0时,元素并不停止,而是做反向的先加速后减速运动,如此反复

加速运动和减速运动的公式与加减速运动的公式相同

加速运动:step = (2n+1)/s =(2n+1)/200

减速运动:step = 2-(2n+1)/s = 2-(2n+1)/200

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<button id="btn">开始运动</button>
<button id="reset">还原</button>
<div id="test" style="height: 100px;width: 100px;background-color: pink;position:absolute;left:0;"></div>
<div style="background-color:green;width:1px;height:100px;position:absolute;left:0px;"></div>
<div style="background-color:blue;width:1px;height:100px;position:absolute;left:200px;"></div>
<div style="background-color:red;width:1px;height:100px;position:absolute;left:400px;"></div>
<script>
function getCSS(obj,style){
    if(window.getComputedStyle){
        return getComputedStyle(obj)[style];
    }
    return obj.currentStyle[style];
}  
reset.onclick = function(){history.go();}
btn.onclick = function(){
    //声明定时器运行次数
    var index=-1;
    //声明步长值step
    var step;
    //声明当前值cur
    var cur;
    //声明目标值
    var target = parseFloat('400px');
    //声明运动的次数,一个方向的加速和减速运动总共算一个运动
    var num=0;
    clearInterval(test.timer);
    test.timer = setInterval(function(){
        //更新定时器的工作次数
        index++;
        //当index为200时,说明进行完一次运动,则将index置0
        if(index == 200){
            index = 0;
            num += 0.5;
        };     
        //更新当前值
        cur = parseFloat(getCSS(test,'left'));
        //更新步长值
        if(Math.floor(num)%2 == 0){
            //加速运动
            if(cur < 200){
                step =(2*index+1)/200;    
            }else{
            //减速运动
                step = 2-(2*index+1)/200;
            }
        }else{
            //加速运动
            if(cur > 200){
                step =-(2*index+1)/200;    
            }else{
            //减速运动
                step = (2*index+1)/200-2;
            }    
        }    
        //更新left值
        test.style.left = cur + step + 'px';
    },20);
}
</script>
	</body>
</html>

原文链接:https://www.qiquanji.com/post/8048.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。