JavaScript个人学习笔记---运动

这篇博客详细介绍了JavaScript中实现的四种运动效果:匀速运动、匀加速运动、缓冲运动和弹性运动。通过实例演示了如何使用setInterval函数和加速度概念来创建这些效果。此外,还讲解了透明度缓冲的处理方法,以及如何通过回调函数实现多物体的同值、不同值、多值运动,甚至模拟重力场的效果。
摘要由CSDN通过智能技术生成

一,匀速运动

二,匀加速运动

三,缓冲运动

四,弹性运动

五,相关案例

一,匀速运动

即无加速度的运动;实现原理就是设置一个速度speed,利用定时器setInterval()函数,在一定时间内让DOM元素的左边界(或者其他任意坐标)+上这个speed;

<script>
        var div = document.getElementsByTagName('div')[0];
        div.addEventListener('click',function(){
            startMove(this,500);
        },false)

        function startMove(dom,target){
            clearInterval(dom.timer);
            var timer;
            var speed = 5;
            dom.timer = setInterval(function(){
                if(dom.offsetLeft == target){
                    clearInterval(dom.timer);
                }else{
                    dom.style.left = dom.offsetLeft + speed + 'px';

                }
            },30)
        }

二,匀加速运动

在匀速运动的基础上加入加速度a;

    <script>
        var div = document.getElementsByTagName('div')[0];
        div.addEventListener('click',function(){
            startMove(this,500);
        },false)

        function startMove(dom,target){
            clearInterval(dom.timer);
            var timer;
            var speed = 5;
            var a = 3;
            var cur ;
            dom.timer = setInterval(function(){
                speed += a;
                cur = parseInt( getStyle(dom,'left') );
                if(target - cur < speed){
                    cur = target;
                }
                if(cur == target){
                    clearInterval(dom.timer);
                }else{
                    dom.style.left = cur + speed + 'px';

                }
            },30)
        }




        function getStyle(dom,attr) {     //获取dom结构的CSSs属性(e为相应的dom结构,attr为查询的属性名)
            if(window.getComputedStyle) {
                return window.getComputedStyle(dom,null)[attr];
            }else {
                return dom.currentStyle[attr];
            }
        }
    </script>

三,缓冲运动

速度在越接近目标点,速度值越小,最后停在目标点处;

 

<script>

        //缓冲运动
        var div = document.getElementsByClassName('demo')[0];
        div.addEventListener('click',function() {
            startMove(this,500);
        },false);


        function startMove(dom,target){
            clearInterval(timer);
            var timer;
            timer = setInterval(function() {
                var speed = Math.ceil((target - dom.offsetLeft)/7) //速度值最小为1
                speed = target - dom.offsetLeft > 0 ? Math.ceil(speed) : Math.floor(speed);     
                //在速度方向为负时,取最小速度为-1,速度方向为正时,取最小速度为1
                if(dom.offsetLeft == target){
                    clearInterval(timer)
                }else{
                    dom.style.left = dom.offsetLeft + speed + 'px';
                }

            },30);
        }


</script>

 三(1)相关案例

1)透明度缓冲;由于透明度的取值是0-1之间,但在定义缓冲运动的方法使,定义速度的最小值为1,所以可以先把透明度的取值增大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值