基础运动

1、匀速运动

首先要给运动的标签一个定位;我们想控制一个物体运动,其实就是改变它的一个left、right、top、bottom坐标,如果不给定位的话即使是给它这样的值,它也不会改变。

html、css代码:

<div></div>
<span></span>
<button id="btn">run</button>

<style>
        div{
            width:100px;
            height:100px;
            background-color:red;
            position:absolute; /* 参照文档进行定位 */
            left:0;
            top:0;
        }
        #btn{
            margin-top:150px;
        }
        span{
            position:absolute;
            width:1px;
            height:100px;
            background-color:black;
            top:0;
            left:300px;
        }
    </style>

js代码:

<script>
        var oDiv = document.getElementsByTagName('div')[0];
        var oBtn = document.getElementById('btn');
        var timer = null;
        oBtn.onclick = function(){  //给button绑定事件,点击button使物体运动
            clearInterval(timer);  //清理上一次的定时器
            var iSpeed = 300 - oDiv.offsetLeft > 0? 7 : -7;//(每隔一定的时间物体移动的距离)
                        //目标点距离 - 当前位置 是否大于0?是的话它的速度就是正值,否则就是负值;
            timer = setInterval(function(){
                if(Math.abs(300 - oDiv.offsetLeft) < Math.abs(iSpeed)){  //目标点 - 当前位置 < 步频
                    //Math.abs取绝对值 不考虑正负
                    clearInterval(timer);
                    oDiv.style.left = '300px';  //最新的位置 = 目标点距离
                }else{
                    oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';//div最新的left值 = 当前的left + 速度(步频) + 像素
                }

            },30)
        }
    </script>

封装成函数

<script>
        var oDiv = document.getElementsByTagName('div')[0];
        var oBtn = document.getElementById('btn');
        var timer = null;
        oBtn.onclick = function(){
            startMove(oDiv,300);
        }

        function startMove(dom,target){
            clearInterval(timer);
            var iSpeed = target - dom.offsetLeft > 0? 7 : -7;
            timer = setInterval(function(){
                if(Math.abs(target - dom.offsetLeft) < Math.abs(iSpeed)){
                    clearInterval(timer);
                    dom.style.left = target + 'px';
                }else{
                    dom.style.left = dom.offsetLeft + iSpeed + 'px';
                }

            },30)
        }
    </script>

2、缓冲运动

物体的速度距离目标点越近 就越小,当到达目标点时,速度减小为0
        var timer = null;
        function startMove(dom,target){
            clearInterval(timer);
            var iSpeed = null;
            timer = setInterval(function(){
                iSpeed = (target - dom.offsetLeft)/7;
                iSpeed = iSpeed > 0?Math.ceil(iSpeed) : Math.floor(iSpeed);
                if(target == dom.offsetLeft){
                    clearInterval(timer);
                }else{
                    dom.style.left = dom.offsetLeft + iSpeed + 'px';
                }
            },30)
        }

缓冲运动—伸缩框

html、css代码:

<div class="wrapper">
     <span class="box"></span>
</div>

.wrapper{
            width:400px;
            height:80px;
            background-color:orange;
            margin-top:200px;
            left:-400px;
            position:absolute;
        }
        .box{
            width:50px;
            height:80px;
            background-color:red;
            right:-50px;
            top:0;
            position:absolute;
        }

js:

var oDiv = document.getElementsByTagName('div')[0];
        oDiv.onmouseenter = function(){
            startMove(oDiv,0);
        }
        oDiv.onmouseleave = function(){
            startMove(oDiv,-400);
        }

缓冲运动—多物体运动

js代码:

var oDiv = document.getElementsByTagName('div');
        for(var i = 0; i < oDiv.length; i++){
            oDiv[i].onmouseenter = function(){
                startMove(this,300);
            }
            oDiv[i].onmouseleave = function(){
                startMove(this,100);
            }
        }

        function getStyle(dom,attr){
            if(window.getComputedStyle){
                return window.getComputedStyle(dom,null)[attr];
            }else{
                return dom.currentStyle[attr];
            }
        }
        var timer = null;
        function startMove(dom,target){
            clearInterval(dom.timer);
            var iSpeed = null,iCur = null;
            dom.timer = setInterval(function(){
                iCur = parseInt(getStyle(dom,'width'));
                iSpeed = (target - iCur)/7;
                iSpeed = iSpeed > 0?Math.ceil(iSpeed) : Math.floor(iSpeed);
                if(target == iCur){
                    clearInterval(dom.timer);
                }else{
                    dom.style.width = iCur + iSpeed + 'px';
                }
            },30)
        }

加速度运动

   <script>
        var oDiv = document.getElementsByTagName('div')[0];
        oDiv.onclick = function(){
            startMove(this);
        }

        var timer = null;
        function startMove(dom){
            clearInterval(dom.timer);
            var iSpeed = 20;
            var a = -3;
            dom.timer = setInterval(function(){
                iSpeed += a;
                dom.style.left = dom.offsetLeft + iSpeed + 'px';
            },30)
        }
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值