zoukankan      html  css  js  c++  java
  • js运动

    运动的原理:js定时器对dom元素的操作,来改变元素的状态.

    代码编写时需要注意到的问题:如果是对位置的修改,就不能忘记加上'px',否则,就浏览器不会出错,元素的位置也不会改变

    下面是css代码:

    #div{width: 100px; height: 100px; background: skyblue;position: absolute;top: 50px;left: 0px;}
    #line{width: 1px; height: 100px; background: tomato;position: absolute;top: 50px;left: 300px; }

    这里是html代码:

    1  <div id="div">ceshi</div>
    2     <button id="btn1">开始</button>
    3     <button id="btn2"></button>
    4     <div id="line"></div>

    下面是js代码:

    <script>
            var oBtn1=document.getElementById("btn1");
            var oBtn2=document.getElementById("btn2");
            var div=document.getElementById("div");
            oBtn1.onclick=function(){
                startMove(div,8);
            }
            oBtn2.onclick=function(){
               stopMove(div);
            }
            function startMove(obj,sx){
                 stopMove(obj);
                    obj.timer= setInterval(
                        function(){
                            if(obj.offsetLeft>=300){//此种判断方式不自然,有一种突然跳到300像素的感觉
                                  stopMove(obj);
                                  obj.style.left=300+'px';
                            }else{
                              obj.style.left=obj.offsetLeft+sx+'px';  
                            }
                            
                        },10
                    )
            }
            function stopMove(obj){
                clearInterval(obj.timer);
            }
        </script>

    方式二

     function startMove(obj,sx){
                 stopMove(obj);
                    obj.timer= setInterval(
                        function(){
                            if(300-obj.offsetLeft<sx){//看起来比较自然
                                  stopMove(obj);
                                  obj.style.left=300+'px';
                            }else{
                              obj.style.left=obj.offsetLeft+sx+'px';  
                            }
                            
                        },10
                    )
            }

     方式三

    function startMove(obj,sx){
               if(obj.offsetLeft>300){
                sx=-sx;
               }
                 stopMove(obj);
                    obj.timer= setInterval(
                        function(){
                            if(Math.abs(300-obj.offsetLeft)<Math.abs(sx)){//看起来比较自然,此时实现的是匀速运动
                                  stopMove(obj);
                                  obj.style.left=300+'px';
                            }else{
                              obj.style.left=obj.offsetLeft+sx+'px';  
                            }
                            
                        },10
                    )
            }

    缓冲运动

    function startMove(obj){
                 stopMove(obj);
                obj.timer= setInterval(
                    function(){
                        if(300-obj.offsetLeft==0){//其实不加这个条件物体也可以停下来,因为(300-obj.offsetLeft)会有等于0的时候,但是不加条件,定时器会一直的被调用
                                stopMove(obj);
                        }else{
                            var s=(300-obj.offsetLeft)/7;
                            var sx=s>0?Math.ceil(s):Math.floor(s);
                            obj.style.left=obj.offsetLeft+sx+'px';
                            console.log(sx);
                        }
                        
                    },10
                )
            }
    一生的日子很长,一定要注意调节,要劳逸结合
  • 相关阅读:
    python并发之concurrent.futures
    Twisted 简介
    Python进程、线程、协程的对比
    协程的优点(Python)
    python concurrent.futures
    gevent 协程 使用
    python高性能代码之多线程优化
    python并发编程之多进程、多线程、异步和协程
    Java——动态代理
    NHibernate之旅(14):探索NHibernate中使用视图
  • 原文地址:https://www.cnblogs.com/weikemudan/p/10207415.html
Copyright © 2011-2022 走看看