二阶段JavaScript-Day17知识点整理(运动、运动封装)

本文介绍如何使用JavaScript实现网页元素的动画效果,包括简单的手动控制移动和封装通用的动画函数。通过定时器和offsetLeft属性控制元素的位置变化,实现平滑过渡。

1.运动

​ 让一个元素在页面中上下左右运动,设置定时器,每隔一定的时间改变物体的left值和top值即可。

    var oBtn = document.querySelector('button')
    var oDiv = document.querySelector('div')

       oBtn.onclick = function(){
        //  让物体向前移动5px    每点击一次,向前移动5px
         oDiv.style.left = oDiv.offsetLeft + 5 +"px";
       }

    oBtn.onclick = function () {
        setInterval(function () {
            oDiv.style.left = oDiv.offsetLeft + 5 + "px";
        }, 100)
    }

    // oBtn.onclick = function () {
    //     setInterval(function () {
    //         // 1. 获取左偏移量 
    //         var leader = oDiv.offsetLeft;
    //         // 2. 设置速度
    //         var speed = 5;
    //         // 3. leader发生变化
    //         leader = leader +speed;

    //         oDiv.style.left = leader + "px";
    //     }, 15)
    // }

    var timer = null;
    oBtn.onclick = function () {
        clearInterval(timer);//每次定时器开启之前,清除上一次的定时器
        timer = setInterval(function () {
            // 1. 获取左偏移量 
            var leader = oDiv.offsetLeft;
            // 2. 设置速度
            var speed = 1;
            // 3. leader发生变化
            leader = leader + speed;
            
            // 4. 设置中止条件
            if (leader >= 1200) {
                leader = 1200;//当你的左偏移量大于等于500。leader一律按照500处理
                clearInterval(timer);//到终点时,记得清除定时器
            }
            console.log(timer);
            // 5. 把改变后的左偏移量赋值给left
            oDiv.style.left = leader + "px";
        }, 15)
    }

2.运动封装

var oBtn = document.querySelectorAll('button')
    var oDiv = document.querySelector('div')
    var timer = null;
    oBtn[0].onclick = function () {
        animate(oDiv, 800);
    }
    oBtn[1].onclick = function () {
        animate(oDiv, 100);
    }

    // // // 反向运动的封装
    // function animate(obj, target) {
    //     clearInterval(timer)
    //     timer = setInterval(function () {
    //         //    1. 获取物体初始的左偏移量
    //         var leader = obj.offsetLeft;
    //         //    2. 设置速度
    //         var speed = -5;
    //         //    3. 让左偏移量变化
    //         leader = leader + speed;//795
    //         //    4. 运动到哪里停止
    //         if (leader <= target) {
    //             leader = target
    //             clearInterval(timer)
    //         }
    //         //   5. 把运动后的leader赋值给left
    //         obj.style.left = leader + "px"
    //     }, 15)
    // }

    // // 正向运动的封装
    // function animate(obj, target) {
    //     clearInterval(timer)
    //     timer = setInterval(function () {
    //         //    1. 获取物体初始的左偏移量
    //         var leader = obj.offsetLeft;
    //         //    2. 设置速度
    //         var speed = 5;
    //         //    3. 让左偏移量变化
    //         leader = leader + speed;//795
    //         //    4. 运动到哪里停止
    //         if (leader >= target) {
    //             leader = target
    //             clearInterval(timer)
    //         }
    //         //   5. 把运动后的leader赋值给left
    //         obj.style.left = leader + "px"
    //     }, 15)
    // }


    // 正反向
    function animate(obj, target) {
        clearInterval(timer)
        timer = setInterval(function () {
            //    1. 获取物体初始的左偏移量
            var leader = obj.offsetLeft;
            //    2. 设置速度
            var speed = target > leader ? 5 : -5;//当你的目标位置大于你的物体位置时,取得是正值,否则是负值
            //    4. 运动到哪里停止
            if (speed >= 0) {
                if (leader >= target) {
                    leader = target
                    clearInterval(timer)
                }
            } else {
                if (leader <= target) {
                    leader = target
                    clearInterval(timer)
                }
            }
            //    3. 让左偏移量变化
            leader = leader + speed;//795

            //   5. 把运动后的leader赋值给left
            obj.style.left = leader + "px"
        }, 15)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值