zoukankan      html  css  js  c++  java
  • javascript中的匀速运动(两种方式)

    javascript中的匀速运动

    不要小看这个东西呀,机关重重呀

     html:

    <input type="button"  value="start" onclick="show()"/>
     <div id="move">
     </div>

    css:

     #move{
         height:100px;
         width:100px;
         background:green;
         position:absolute;
         top:100px;
         left:0px;
     }

    js实现第一步:动起来

     function show(){
         //首先我们要让物体起来
         var obj=document.getElementById("move");
         var zhen=8; 
         //定时器
         setInterval(function(){
             obj.style.left=obj.offsetLeft+zhen+"px";
         },20)
         
     }

    动起来了,单你不可能让它一直动撒!设定一个终点!假设是300px

      var Timer=null;
      function show(){
         //首先我们要让物体起来
         var obj=document.getElementById("move");
         var zhen=8; 
         //定时器
         Timer=setInterval(function(){
             if(obj.offsetLeft==300){  //注意这里,机关重重呀
                 clearInterval(Timer) 
             }
             obj.style.left=obj.offsetLeft+zhen+"px";
         },20)
         
     }

    尼玛,运行一看,居然没停下来,我操,我们来分析机关!

    那这么办呢?--终止的条件!

    尝试方法一 

    当它们之间的距离相差一个帧的时候,我们就停止下来,最后让它强制对其滴呀

     if(Math.abs((obj.offsetLeft-iTarget))<=Math.abs(speed)){
             clearInterval(rightTimer);
             obj.style.left=iTarget+'px';
    }

    尝试方法二

    距离/zhen=0,也就是能够整除的时候,我们才能停在指定的地点滴呀!例如:

    但是,到这一步,还没有完滴呀;当你多次点击按钮是,你会发现,物体运动的越来越快了呀!

    那是因为,你每点击一次,那么就会多生成一个setInterval 对象滴呀!

    解决方法就是在setInterval(function (){})前面加上clearInterval(Timer)

    最终较为完整的代码如下:

      var Timer=null;
      function show(){
         var obj=document.getElementById("move");
         var zhen=10; 
          clearInterval(Timer) ;    
         Timer=setInterval(function(){
             if(obj.offsetLeft==300){ 
                clearInterval(Timer) ;         
             }else{
            obj.style.left=obj.offsetLeft+zhen+"px";
             }
         },20)
     }

    看似简单,又不太简单的运动,有了这个基础之后,我们就可以做出其他的了!

    再思考,如果我们要它反向运动呢?

        var speed=0;
        //目标来减去物体的位置是否大于零,然后判断速度的正负滴呀
        var isPlus=iTarget-obj.offsetLeft;
        if(isPlus<0){
            speed=-7;
        }else{
            speed=7;
        }

    然后,我来给出完整的匀速运动的javascript代码滴呀

     //下面我来给出完整的代码区域
     //运动的几大要素;
     //物体自身的位置:obj.offsetLeft;
     //目标终点:    iTarget;
     //帧           speed;
     //Timer
     var Timer=null;
     function JavaScriptMove(iTarget,Id){
         var obj=document.getElementById(Id);
         var speed=6;
         if(obj.offsetLeft-iTarget>0){
             speed=-speed;
         }else{
            speed=speed; //....
         }
          //为了防止鼠标的多次点击滴呀
          clearInterval(Timer);
         //开始运动
         Timer=setInterval(function (){
             //物体停止的条件:他们之间的距离差值小于一个帧滴呀就停下来...然后
             if(Math.abs(obj.offsetLeft-iTarget)<=Math.abs(speed)){
                clearInterval(Timer);
                //强制移动到目标
                obj.style.left=iTarget+"px"; //这样就算是移动到了指定的地点滴呀
             }else{
                 obj.style.left=obj.offsetLeft+speed+'px';
             }
         },30)
         
         
     }
     //最后还得尝试着,用面向对象的方式进行代码的改造滴滴
     //这个物体的简单运动滴呀

    javascript 实现匀速匀速方式二:

    for循环+闭包+setTimeout (不过,不推荐这种做法,不过可以加深对闭包的理解)

    具体的原理你可以看另外一边我的文章

    http://www.cnblogs.com/mc67/p/4801422.html 

    感觉还多帅滴呀

    两种方式来实现滴呀

  • 相关阅读:
    归并排序
    堆排序
    数组数据生成器
    冒泡排序
    快速排序
    希尔排序
    排序接口与抽象类(java)
    Pycharm下HTMLTestRunner不生成测试报告
    抓包工具使用记录
    接口学习笔记
  • 原文地址:https://www.cnblogs.com/mc67/p/5170169.html
Copyright © 2011-2022 走看看