亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用JavaScript 實現對象 勻速/變速運動的方法

2019-11-20 22:43:53
字體:
來源:轉載
供稿:網友

實例1――控制一個對象的勻速移動和停止

HTML:

復制代碼 代碼如下:

<input id="btn" type="button" value=" Move It ! "/>
    <div id="d1">
        <img id="i1" src="1.jpg" alt/>
    </div>

JS:實現向右運動
復制代碼 代碼如下:

var timer=null;
    window.onload=function(){
        var odiv=document.getElementById('d1');
        var obtn=document.getElementById('btn');
        clearInterval(timer); //作用見要點①
        obtn.onclick=function(){
            timer=setInterval(function(){
                var speed=10;
                if(odiv.offsetLeft>=300){ //判斷對象邊距 到達指定位移則關閉定時器
                    clearInterval(timer);
                }else{
                    odiv.style.left=odiv.offsetLeft+speed+'px';
                }
            },30);
        }
    }

要點:
①if語句的條件不能用“==”運算符,如上述代碼,當speed的值為基數如7時,不斷增加的左邊距不會出現300px值,而是到達294后直接跳到301,導致條件失效,無法停止。
②使用else語句是防止停止移動后,每點擊一次按鈕,div任會移動一個speed。
③在定時器之前,先關閉一下定時器,防止連續點擊按鈕時,同時打開多個定時器,使移動速度疊加后更快。

封裝:

復制代碼 代碼如下:

//object:要移動的對象id   itarget:水平位移位置
   var timer=null;
    function moveto(object,itarget){
        var obj=document.getElementById(object);
            clearInterval(timer);
            timer=setInterval(function(){
                var speed=0;
                if(obj.offsetLeft<itarget){  //通過對象距離父級的邊距和水平位移量 判斷左右位移方向
                    speed=10;
                }else{
                    speed=-10;
                }
                if(obj.offsetLeft==itarget){
                    clearInterval(timer);
                }else{
                    obj.style.left=obj.offsetLeft+speed+'px';
                };
            },30);
    }

實例2――修改上述封裝的函數moveto(),使該對象變速停止

 JS:

復制代碼 代碼如下:

var timer=null;
    function moveto(object,itarget){
        var obj=document.getElementById(object);
            clearInterval(timer);
            timer=setInterval(function(){
                var speed=0;
                if(obj.offsetLeft<itarget){//通過位移量除以10,使speed遞減,實現減速停止。   乘以10則為加速。通過乘除的數字,控制快慢
                    speed=(itarget-obj.offsetLeft)/10;
                }else{
                    speed=-(obj.offsetLeft-itarget)/10;
                }
                speed=speed>0?Math.ceil(speed):Math.floor(speed);//取整,解決最后不足1px的位移量被忽略的問題
                if(obj.offsetLeft==itarget){
                    clearInterval(timer);
                }else{
                    obj.style.left=obj.offsetLeft+speed+'px';
                };
                document.title=obj.offsetLeft;
            },30);
    }

要點:
①通過遞減speed值,實現變速。
②移動到最后,當像素小于1px時,小于1px的幾個值不會被添加(或減去)到對象left中,而是被忽略,所以最終位移量比設定的水平位移位置itarget要少幾個像素。解決的辦法是進行取整:正數向上取整ceil(),負數向下取整floor()。

 

 擴展:垂直位移的原理和水平位移的相同。

 補充1:
解決speed與itarget不能整除,導致對象不能精確到達itarget位置,而是在其左右抖動問題:

復制代碼 代碼如下:

var timer=null;
    function moveto(object,itarget){
        var obj=document.getElementById(object);
            clearInterval(timer);
            timer=setInterval(function(){
                var speed=0;
                if(obj.offsetLeft<=itarget){
                    speed=7;
                }else{
                    speed=-7;
                }
//設置對象在離目標位置itarget的距離小于speed時,停止運動,同時設置對象的left直接移動到itarget的位置。
                if(Math.abs(itarget-obj.offsetLeft<=speed)){
                    clearInterval(timer);
                    obj.style.left=itarget+'px';
                }else{
                    obj.style.left=obj.offsetLeft+speed+'px';
                };
                document.title=obj.offsetLeft;
            },30);
    }

補充2:

offset的Bug:例如offsetWidth,它包含的不只是width,還包含padding和border。當給對象設置了填充或邊框時,再將offsetWidth賦值給對象時,就會運動就會有差異。
解決:不用offset,而是通過創建一個兼容IE和FF的函數,獲取元素的width屬性值,來代替offsetWidth。該函數如下:getAttr()

復制代碼 代碼如下:

function getAttr(obj,attrName){
        var obj=document.getElementById(obj);
        if(obj.currentStyle){
            return obj.currentStyle[attrName]; //兼容IE
        }else{
            return getComputedStyle(obj,false)[attrName]; //兼容FF
        }
    }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久天天躁狠狠躁夜夜躁| 欧美另类在线播放| 日韩电视剧在线观看免费网站| 欧美第一页在线| 国产精品久久av| 久久精品亚洲精品| 日韩中文理论片| 国产精品一二三在线| 中文字幕亚洲情99在线| 欧美日韩一区二区三区在线免费观看| 国产精品入口夜色视频大尺度| 久久久久久这里只有精品| 日韩人在线观看| 国产精品久久激情| 成人中文字幕+乱码+中文字幕| 91嫩草在线视频| 孩xxxx性bbbb欧美| 国产精品久久久av| 中文欧美在线视频| 国产人妖伪娘一区91| 欧美一区三区三区高中清蜜桃| 日韩精品高清在线| 亚洲小视频在线观看| 久久成人综合视频| 国产欧美日韩精品在线观看| 久久免费在线观看| 97久久精品国产| 欧美视频第一页| 欧美激情在线播放| 亚洲自拍另类欧美丝袜| 日本精品久久久久久久| 成人精品久久av网站| 欧美激情欧美激情在线五月| 国产精品久久久久久婷婷天堂| 国产美女扒开尿口久久久| 亚洲色图欧美制服丝袜另类第一页| 最新日韩中文字幕| 亚洲一区二区久久久| 久久久免费在线观看| 欧美一级淫片丝袜脚交| 日韩成人中文字幕在线观看| 亚洲欧美一区二区激情| 秋霞午夜一区二区| 国产精品www| 亚洲欧美精品伊人久久| 成人免费激情视频| 性色av一区二区三区| 亚洲人成网站色ww在线| 亚洲老头同性xxxxx| 欧美视频在线免费看| 91系列在线观看| 亚洲精品一区二三区不卡| 中文字幕精品影院| 欧美日韩免费区域视频在线观看| 久久亚洲精品网站| 亚洲男人的天堂在线播放| 国产欧美日韩最新| 欧美精品做受xxx性少妇| 亚洲黄一区二区| 这里只有精品在线观看| 午夜精品久久久99热福利| 日韩最新在线视频| 久久国产精品影片| 欧美激情在线播放| 国外成人免费在线播放| 亚洲视频网站在线观看| 久久久精品一区| 日韩中文第一页| 国产美女精品视频免费观看| 欧美激情一区二区三区在线视频观看| 亚洲免费电影一区| 自拍偷拍亚洲精品| 亚洲激情电影中文字幕| 久久精品青青大伊人av| 在线观看免费高清视频97| 久久久久日韩精品久久久男男| 深夜福利日韩在线看| 成人免费直播live| 久久精品亚洲精品| 国产精品免费一区| 亚洲成人久久一区| 欧美一区二区三区免费视| 久久久成人精品视频| 日产精品99久久久久久| 中文字幕一区二区三区电影| 97av在线视频免费播放| 亚洲电影免费观看高清完整版| 亚洲图片制服诱惑| 91免费国产网站| 久久精品中文字幕| 亚洲精品电影网在线观看| 在线播放精品一区二区三区| 亚洲国产欧美一区二区丝袜黑人| 一本大道香蕉久在线播放29| 久久精品影视伊人网| 456亚洲影院| 992tv在线成人免费观看| 亚洲第一中文字幕| 最近2019年日本中文免费字幕| 清纯唯美亚洲综合| 欧美电影免费观看高清完整| 日韩成人久久久| 国产成人精品一区二区| 国产欧美一区二区三区在线| 中文字幕久精品免费视频| 日本久久久久久久| 日韩av一区在线观看| 欧美日韩亚洲91| 欧美精品在线观看| 欧美日韩免费在线| 国产精品久久久久久av下载红粉| 亚洲tv在线观看| 日韩av中文字幕在线免费观看| 日韩美女av在线| 91精品在线看| 91美女福利视频高清| 色狠狠久久aa北条麻妃| 欧美视频中文字幕在线| 国产在线播放不卡| 欧美激情亚洲自拍| 久久精品色欧美aⅴ一区二区| 国产成人精品视频在线| 九九精品在线观看| 亚洲激情免费观看| 亚洲国产精久久久久久| 人人做人人澡人人爽欧美| 日本成人激情视频| 永久免费毛片在线播放不卡| 欧美精品一区二区免费| 中文字幕精品视频| 日韩精品中文字幕在线播放| 欧美性视频精品| 国产精品永久在线| 日本aⅴ大伊香蕉精品视频| 亚洲第一综合天堂另类专| 欧美多人爱爱视频网站| 欧美在线一区二区视频| 欧美日韩激情网| 成人亚洲欧美一区二区三区| 亚洲r级在线观看| 成人午夜两性视频| 中文字幕亚洲一区二区三区五十路| 欧美激情精品久久久久久蜜臀| www.欧美精品一二三区| 亚洲精品国偷自产在线99热| 97色在线观看免费视频| 成人美女免费网站视频| 日韩高清电影免费观看完整| 一区二区三区www| 亚洲精品久久久久久久久久久久| 欧美多人爱爱视频网站| 日韩高清免费观看| 国产91在线播放九色快色| y97精品国产97久久久久久| 欧美一区亚洲一区| 亚洲国产97在线精品一区| 亚洲免费成人av电影| 久久91亚洲人成电影网站| 亚洲色图日韩av| 欧美性猛交视频| 欧美极品少妇全裸体| 日韩欧美国产免费播放| 高清欧美性猛交| 日本精品视频网站|