js將任意元素移動到指定位置


思路:將某元素移動到指定位置======需傳入2個參數。一個是要移動的元素element,另一個是指定的位置target。

獲取元素的當前位置current,設置一個每次移動的距離step,設置定時器,通過多次循環移動,到達目標位置。根據當前位置和目標位置的距離判斷是否需要執行循環

以本文為例,點擊按鈕1,div移動到400px的位置,點擊按鈕2 ,移動到1600px,這里有幾個坑:

1、元素要移動,需要脫離文檔流,即css樣式中需要使用絕對定位

2、每觸發一次點擊,就產生一個定時器,當不停地點擊按鈕時,元素移動的速度不斷加快

===》解決:只設置一個定時器,且在執行定時器之前先清理一次定時器,防止上次的操作留下影響。

只設置一個定時器可以根據對象的屬性,對象點出來的屬性有且只有一個。即element.timer1=setInterval();

3、獲取元素的當前位置,需要用offsetLeft /  offsetTop / offsetWidth / offsetHeight,得出的結果是number類型,沒有px

html以及css樣式

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>    
 6         <style>
 7             div{
 8                 width: 200px;
 9                 height: 130px;
10                 background: red; 
11                 position: absolute;
12                 left: 20px;
13                 }
14         </style>
15     </head>
16     
17     <body>
18         <input type="button" value="按鈕1" id="btn"/>
19         <input type="button" value="按鈕2" id="btn2"/>
20         <div id="dv"> </div>        
21     </body>    
22 </html>

 js代碼

 1  <script>
 2              document.getElementById("btn").onclick=function(){
 3                  animate(document.getElementById("dv"),400);
 4                  
 5              };            
 6              document.getElementById("btn2").onclick=function(){
 7                  animate(document.getElementById("dv"),1600);
 8             };
 9              //把任意元素移動到指定的目標位置
10              function animate(element,target){
11                  clearInterval(element.timer1);
12                  element.timer1=setInterval(function(){//element是一個對象,對象點出來的屬性有且只有一個,避免多次點擊按鈕產生多個定時器
13                      var current=element.offsetLeft;    //獲取當前位置,數字類型,沒有px。
14                      //不可以用element.style.left,因為該寫法只能獲取到行內樣式,不能獲取到<style></style>標簽內的樣式
15                      var step=10;//每次移動的距離
16                      step=current<target?step:-step;//step的正負表示了向左或是向右移動
17                      current+=step;    //計算移動到的位置,數字類型,沒有px                
18                      if(Math.abs(target-current)>Math.abs(step)){//當離目標位置的距離大於一步移動的距離
19                          element.style.left=current+"px";//移動
20                     
21                      }else{//當間距小於一步的距離,則清理定時器,把元素直接拿到目標位置
22                          clearInterval(element.timer1);
23                          element.style.left=target+"px";
24                          
25                     }
26                  },20);
27              }
28          </script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM