• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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热| 91精品国产福利在线导航| 久久久久一级精品亚洲国产成人综合AV区 | 久久精品免费观看| 亚洲色精品88色婷婷七月丁香| 国产精品99爱免费视频| 成人精品在线视频| 精品少妇无码AV无码专区| 亚洲精品视频免费观看| 精品无码人妻一区二区三区不卡| 日韩欧美精品不卡| 国产精品亚洲欧美一区麻豆 | 久久精品国产亚洲一区二区| 精品深夜AV无码一区二区| 亚洲国产精品一区二区久久hs | 精品国产婷婷久久久| 国产精品v欧美精品v日韩| 久久精品国产99国产精偷| 99久久精品毛片免费播放| 国产精品内射后入合集| 久久久久久亚洲Av无码精品专口| 亚洲人成国产精品无码| 久久精品三级视频| 精品国产成人在线| 国语自产精品视频| 精品人体无码一区二区三区| 国产成人精品cao在线| 国产成人精品a视频一区| 2023国产精品自拍| 国产成人高清精品免费观看| 国产精品欧美久久久久无广告| 国产成人精品久久亚洲高清不卡| 欧美精品人爱c欧美精品| 亚洲国产精品一区二区久久| 91亚洲国产成人久久精品| 国产高清国内精品福利99久久| 国产精品乱伦| 免费精品久久久久久中文字幕 | 第一福利永久视频精品| 国产精品素人搭讪在线播放 |