<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用JavaScript實現對象勻速/變速運動的方法_基礎知識

        來源:懂視網 責編:小采 時間:2020-11-27 21:09:20
        文檔

        使用JavaScript實現對象勻速/變速運動的方法_基礎知識

        使用JavaScript實現對象勻速/變速運動的方法_基礎知識:實例1——控制一個對象的勻速移動和停止HTML: 代碼如下: JS:實現向右運動 代碼如下:var timer=null; window.onload=function(){ var odiv=document.getElementById('d1'); var obtn=document.getElementById(
        推薦度:
        導讀使用JavaScript實現對象勻速/變速運動的方法_基礎知識:實例1——控制一個對象的勻速移動和停止HTML: 代碼如下: JS:實現向右運動 代碼如下:var timer=null; window.onload=function(){ var odiv=document.getElementById('d1'); var obtn=document.getElementById(
        實例1——控制一個對象的勻速移動和停止

        HTML:
        代碼如下:





        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 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 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
        }
        }

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用JavaScript實現對象勻速/變速運動的方法_基礎知識

        使用JavaScript實現對象勻速/變速運動的方法_基礎知識:實例1——控制一個對象的勻速移動和停止HTML: 代碼如下: JS:實現向右運動 代碼如下:var timer=null; window.onload=function(){ var odiv=document.getElementById('d1'); var obtn=document.getElementById(
        推薦度:
        標簽: 運動 對象 變速
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 又粗又长又爽又长黄免费视频 | 在线视频免费观看高清| 久久99国产综合精品免费| 亚洲综合AV在线在线播放| 亚洲日韩精品A∨片无码加勒比 | 在线观看特色大片免费视频| 亚洲福利电影一区二区?| 特黄特色大片免费| 亚洲阿v天堂在线2017免费| a级毛片免费观看网站| 国产亚洲自拍一区| 日韩免费人妻AV无码专区蜜桃 | 亚洲码欧美码一区二区三区| 久久久久久久久久久免费精品| 久久精品国产亚洲AV天海翼| AV片在线观看免费| 日本亚洲中午字幕乱码| 国产精品视频免费| 亚洲狠狠色丁香婷婷综合| 又粗又大又长又爽免费视频| 亚洲中文字幕久在线| 免费观看的a级毛片的网站| 久久亚洲sm情趣捆绑调教| 24小时免费直播在线观看| 亚洲免费视频在线观看| 中文字幕无线码免费人妻| 亚洲精品高清视频| 日韩免费a级毛片无码a∨| 久久亚洲国产视频| 中文字幕无码免费久久9一区9 | 亚洲午夜无码久久| 3d成人免费动漫在线观看| 亚洲国产精品成人精品无码区 | 国产gav成人免费播放视频| 亚洲国产综合人成综合网站00| 免费国产作爱视频网站| 日本激情猛烈在线看免费观看| 免费特级黄毛片在线成人观看| 一级做a免费视频观看网站| 亚洲精品影院久久久久久| 国产在线一区二区综合免费视频 |