运动函数的封装

单方向匀速运动

// 获取元素
var div = document.getElementsByTagName("div")[0];
var btn = document.getElementsByTagName("button")[0];
​
​
// 定义变量保存定时器的返回值
var timer = null;
​
// 绑定事件  div  left  10 ->1000
btn.onclick = function () {
    // 防止用户多次点击 在设置定时器之前先清除定时器
    clearInterval(timer);
​
    // 设置定时器
    timer = setInterval(function () {
        // 先获取当前的样式值
        var curVal = parseFloat(getStyle(div, "left"));
​
        // 每次在原来的基础上去增加一个固定值
        var speed = curVal + 10;
​
        // 清除定时器
        if (speed >= 1000) {
            // 重新给speed进行赋值  因为speed可能大于目标值
            speed = 1000;
            clearInterval(timer);
​
        }
​
        console.log(timer);
​
        // 设置
        div.style.left = speed + 'px';
    }, 50);
}

反复匀速运动

// 获取元素
var div = document.getElementsByTagName("div")[0];
var btn = document.getElementsByTagName("button");


// 定义变量保存定时器的返回值
var timer = null;

// 绑定事件  div  left  10 ->1000
btn[0].onclick = function () {
     div.style.backgroundImage ="url('./img/right.gif')";
    // 防止用户多次点击 在设置定时器之前先清除定时器
    clearInterval(timer);

    // 设置定时器
    timer = setInterval(function () {
        // 先获取当前的样式值
        var curVal = parseFloat(getStyle(div, "left"));

        // 每次在原来的基础上去增加一个固定值
        var speed = curVal + 10;

        //到达目标值清除定时器
        if (speed >= 1000) {
            // 重新给speed进行赋值  因为speed可能大于目标值
            speed = 1000;
            clearInterval(timer);
        }

        // 设置
        div.style.left = speed + 'px';
    }, 50);
}


// 1000 -> 10
btn[1].onclick = function(){
    div.style.backgroundImage ="url('./img/left.gif')";
    // 防止用户多次点击先清除定时器
    clearInterval(timer);
    // 设置定时器
    timer = setInterval(function(){
        // 先获取当前的样式值
        var curVal = parseFloat(getStyle(div,"left"));

         // 每次在原来的基础上去减少一个固定值
         var speed = curVal - 10;

        //到达目标值清除定时器
        if(speed<= 10){
            // 重新给speed赋值
            speed = 10;
        }

        // 设置
        div.style.left = speed + 'px';
    },50);
}

简单的封装

/*
    作用:匀速运动
    @para:参数
        eleObj:元素对象
        attr:样式属性
        step:步长
        target:目标值
*/

function move(eleObj, attr, step, target) {
    // 防止用户多次点击先清除定时器
    clearInterval(timer);
    // 设置定时器
    timer = setInterval(function () {
        // 先获取当前的样式值
        var curVal = parseFloat(getStyle(eleObj, attr));

        // 每次在原来的基础上去增加一个固定值
        var speed = curVal + step;

     	//  到达目标值清除定时器
        if ((speed >= target && step > 0) || (speed <= target && step < 0)) {
            // 给speed重新赋值为目标值
            speed = target;
            // 清除定时器
            clearInterval(timer);
        }

        // 设置样式值
        eleObj.style[attr] = speed + 'px';
    }, 50);
}

封装完善

/*
         作用:匀速运动
         @para:参数
             eleObj:元素对象
             attr:样式属性
             step:步长
             target:目标值
     */

function move(eleObj, attr, step, target) {
    // 判断步长的正负
    //  初始值小于目标值step正数,初始值大于目标值step为负数
    step = parseFloat(getStyle(eleObj, attr)) < target ? step : -step;
    // 防止用户多次点击先清除定时器
    clearInterval(eleObj.timer);
    // 设置定时器并且将定时器的返回值保存元素的自定义属性上
    eleObj.timer = setInterval(function () {
        // 先获取当前的样式值
        var curVal = parseFloat(getStyle(eleObj, attr));

        // 每次在原来的基础上去增加一个固定值
        var speed = curVal + step;

        if ((speed >= target && step > 0) || (speed <= target && step < 0)) {
            // 给speed重新赋值为目标值
            speed = target;
            // 清除定时器
            clearInterval(eleObj.timer);
        }

        // 设置样式值
        eleObj.style[attr] = speed + 'px';
    }, 50);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值