计时器的深入学习1(实现运动效果的domove()函数的封装过程及回调函数)

我最终的目的是用源生JS代码封装一个domove()函数,可以在传参之后实现元素任意方向的运动,在达到最终目的前应该一步一步地完成:
1.配合之前封装过的getstyle()函数,实现点击按钮之后让一个div向前移动10px的效果:

<body>
    <button id="btn">前进</button>
    <div id="div1" style="width:100px; height:100px; background:red; margin-top:20px; position:absolute;"></div>
    <script>
        var oBtn=document.getElementById("btn");
        var oDiv=document.getElementById("div1");
        function getstyle(obj,attr){
    
            return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];
        }
        oBtn.onclick=function(){
    
            var nowPosition =parseInt(getstyle(oDiv,'left'));
            oDiv.style.left=nowPosition+10+'px';
        }
    </script>
</body>

2.用两个按钮分别控制div向前向后动
3.把div向前向后动改成上下左右移动
·
·
·
按照这样的思路,再结合计时器,最终一步步实现一点按钮就能使元素连贯地变到目的的样式:

function doMove(id,derection,speed,subjectPosition){
   
//id:要运动的元素;derection:以什么方向为参照来运动(left、right、top、bottom);speed:计时器每循环一次移动的距离;subjectPosition:运动所要达到的样式的值
        speed= parseInt(getstyle(getid(id),derection))> subjectPosition? -speed : speed;//判断运动的方向
        clearInterval(getid(id).timer);
        getid(id).timer=setInterval(function(){
   
            var nowPosition =parseInt(getstyle(getid(id),derection));
            var thisPosition=nowPosition+speed;
            if(thisPosition>=subjectPosition&&speed>0||thisPosition<=subjectPosition&&speed<0){
            //判断有无达到目标点
                thisPosition=subjectPosition;
                clearInterval(getid(id).timer);
            }
            getid(id).style[derection]=thisPosition+'px';
        },30)
    }

例如:模拟一些网页,做一个“点击有惊喜”的效果。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
#div1{
    width:800px; height:800px; background:#000; position:relative;left:50%; margin-left:-400px;}
#div2{
    width:30px; height:200px; background:#666; color:#fff;text-align:center; padding-top:50px; position:absolute; right:0; top:40%; cursor:pointer;}
#div3{
    width:80px; height:200px; background:#69F; color:#909;text-align:center; padding-top:50px; position:absolute; right:-80
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值