JavaScript匀速运动

    xiaoxiao2025-04-13  50

    自注册账号以来,一直没有留下过什么东西,最近了解了JS中的元素运动,希望在这里记录分享一下.首先说一下思路吧. 1.首先我们页面内需要有一个元素,为这个元素设置一定的宽高、背景色以及绝对定位.

    <div style = "height:100px; width:100px; background:#f40; position:absolute; left:0; top: 100;"></div>

    2.为元素添加事件,当事件发生时,控制元素的绝对定位坐标. 1)先找到该元素,我这里使用TagName;

    var ele = document.getelementsByTagName('div')[0];

    2)这里有一个匀速运动的思想,如何才能让元素移动呢?那就是让元素的绝对定位坐标一定的像素增加.那么如果匀速运动呢?这里就需要调用定时器来实现.

    var timer = null; function eleMove( obj, target ){ clearInterval( timer ); timer = setInterval( () => { var speed = target - obj.offsetLeft > 0 ? 2 : -2; if( target == obj.offsetLeft ){ clearInterval( timer ); }else{ obj.style.left = obj.offsetLeft + speed + 'px'; } },30) }

    这里解释一下这段代码.首先我们在全局定义了一个空的变量,这是为定时器准备的.obj是需要操作的元素,target是元素的移动参数,speed处使用一个三目判断元素需要向左运动还是向右运动.如下图所示,如果(target - obj.offsetLeft)是一个正值,证明元素在目标参数左边,需要向右运动;如果是一个负值,证明元素在参数右边,需要向左边移动.

    ‘’’ if语句是为了判断元素的定位坐标是否与目标一致,如果一直,就停止计时器,如果不一致,元素继续移动. 我在函数的最顶部添加了一个清除定时器的命令,因为我们在实际操作中会发现当我们多次出发事件时,元素移动会越来越快,这是因为我们重复触发事件,导致函数被重复调用.利用清除定时器命令可以清除上次触发事件的定时器,这样就不会有上述问题出现了.

    obj.onclick = function(){ eleMove( obj, target ); }

    可以使用上面代码调用这个函数. 第一次在这里写博客,如有不足之处,还望指出,我会加以修正.

    最新回复(0)