網頁內容變速滑動~由快至慢

嘿~節前最後天與客戶看了下美工設計的網站頁面,其中說到了搜索框的滑動。。具體是這樣的,搜索框上半部分是模塊搜索表單,底部是相關搜索內容的按鈕,點擊相關按鈕,上半部分的搜索內容也會隨之相應滑動到相關的搜索表單內容,但是一聽到美工想要在頁面上實現這個功能,我就來了興趣,因爲之前沒有做過這個功能,一直都是用display直接隱藏顯示的,於是今晚抽空分析了下這個滑動的動作實現。。

 

由於之前一直在搞公司新筆記本的vista安裝,非常鬱悶。。SP1激活不了。。索性不搞了,一直到大概12點的時候才空下時間開始嘗試寫腳本代碼。。。因爲這在放假前腦海中就有了思路,所以代碼寫起來很快。。。(我知道網上類似代碼很多,不要鄙視我,我喜歡挑戰自己,看看自己能做到什麼地步)

 

三下五除二,直接寫了一個for循環的腳本實現,打開IE,試了一下,效果還不錯,沒想到竟然還真的那麼簡單,但仔細想想,其實效果還不能完全令我滿意,因爲for循環的滑動是勻速的。。。沒勁,這個無法增強視覺以及體驗效果。。

然後放到firefox裏面試了下(客戶要求跨IE、FireFox瀏覽器),鬱悶了,顯示效果完全與IE兩樣。。。直接跳過了for循環的過程,直達我要顯示的模塊。。這根使用display的效果完全一樣嘛~~這可不是我要的效果

以下是我不滿意的beta1版代碼 = =!

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5. <title>滑動效果</title>
  6. <script>
  7. function moveSearch(topValue){
  8.     var _top = document.getElementById("searchDiv").scrollTop;
  9.     for(i = 0; i < Math.abs(_top-topValue); i++){
  10.         if(_top < topValue){
  11.             document.getElementById("searchDiv").scrollTop += 1;
  12.         }else{
  13.             document.getElementById("searchDiv").scrollTop -1;
  14.         }
  15.     }
  16. }
  17. </script>
  18. </head>
  19.     <body>
  20.         <div id="searchDiv" style="border:1px solid blue;width:200px;height:400px;overflow:hidden">
  21.             <div style="border:1px solid blue;width:200px;height:398px;">11111111<br>11111111<br>11111111<br></div>
  22.             <div style="border:1px solid blue;width:200px;height:398px;">22222222<br>22222222<br>22222222<br></div>
  23.             <div style="border:1px solid blue;width:200px;height:398px;">33333333<br>33333333<br>33333333<br></div>
  24.         </div>
  25.         <div>選擇按鈕</div>
  26.         <div><input type="button" value="look 1" onclick="moveSearch(0)"/></div>
  27.         <div><input type="button" value="look 2" onclick="moveSearch(400)"/></div>
  28.         <div><input type="button" value="look 3" onclick="moveSearch(800)"/></div>
  29.         <div id="show"></div>
  30.     </body>
  31. <html>

於是決定做一個變速的滑動效果。。。先快後慢的。。。哼哼~開始考慮使用setTimeout來控制時間。。。。。結果發現。。些微的時間變動根本沒有什麼效果,而且滑動緩慢到無敵。。雖然我設置的是1毫秒滑動1像素 = =!於是考慮別的辦法。。。既然不能控制時間,爲什麼我就不考慮控制滑動尺寸呢?啊哈哈哈,這個無敵。。還是這個方法好。。於是考慮到了使用減半的尺寸滑動方式,這個也正好是我想要的效果。。。於是寫下了下面的代碼。。。

beta2版~~~

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5. <title>滑動效果</title>
  6. <script>
  7. function moveSearch(topValue){
  8.     var _top = document.getElementById("searchDiv").scrollTop;
  9.     if(_top < topValue){
  10.         document.getElementById("searchDiv").scrollTop += Math.round(Math.abs(_top-topValue)/2);
  11.     }else if(_top > topValue){
  12.         document.getElementById("searchDiv").scrollTop -Math.round(Math.abs(_top-topValue)/2);
  13.     }
  14.     if(_top != topValue){
  15.         setTimeout("moveSearch("+topValue+")",1);
  16.     }
  17. }
  18. </script>
  19. </head>
  20.     <body>
  21.         <div id="searchDiv" style="border:1px solid blue;width:200px;height:400px;overflow:hidden">
  22.             <div style="border:1px solid blue;width:200px;height:398px;">11111111<br>11111111<br>11111111<br></div>
  23.             <div style="border:1px solid blue;width:200px;height:398px;">22222222<br>22222222<br>22222222<br></div>
  24.             <div style="border:1px solid blue;width:200px;height:398px;">33333333<br>33333333<br>33333333<br></div>
  25.         </div>
  26.         <div>選擇按鈕</div>
  27.         <div><input type="button" value="look 1" onclick="moveSearch(0)"/></div>
  28.         <div><input type="button" value="look 2" onclick="moveSearch(400)"/></div>
  29.         <div><input type="button" value="look 3" onclick="moveSearch(800)"/></div>
  30.         <div id="show"></div>
  31.     </body>
  32. <html>

試了一下,效果還不錯,哈哈哈,達到我需要的效果了。。。然後開始壓力測試。。。這個也需要壓力測試?當然了,這裏所謂的壓力測試就是。。。。。。。。。。加快觸發事件的頻率,也就是。。。。狂點阿,試試看如果上次事件未執行完,是否會影響下次執行的效果。。。。結果果然不出我所料。。看到網頁元素因爲我的瘋狂點擊而在網頁上上下顫抖。。。弄得我一陣內疚。。。唉,還是需要改阿。。。。

於是考慮到了加入全局變量來控制setTimeout的變化。。。。

以下是beta3的代碼,也就是最終版本的。。。。。目前爲止感覺良好,無bug。。。。

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5. <title>滑動效果</title>
  6. <script>
  7. /*
  8. function moveSearch(topValue){
  9.     var _top = document.getElementById("searchDiv").scrollTop;
  10.     for(i = 0; i < Math.abs(_top-topValue); i++){
  11.         if(_top < topValue){
  12.             document.getElementById("searchDiv").scrollTop += 1;
  13.         }else{
  14.             document.getElementById("searchDiv").scrollTop -= 1;
  15.         }
  16.     }
  17. }
  18. */
  19. var moveSearchFlag = false;
  20. var moveSearchTimeAction = null;
  21. function moveSearch(topValue){
  22.     if(moveSearchTimeAction != null){
  23.         clearTimeout(moveSearchTimeAction);
  24.     }
  25.     var _top = document.getElementById("searchDiv").scrollTop;
  26.     if(_top < topValue){
  27.         document.getElementById("searchDiv").scrollTop += Math.round(Math.abs(_top-topValue)/2);
  28.     }else if(_top > topValue){
  29.         document.getElementById("searchDiv").scrollTop -= Math.round(Math.abs(_top-topValue)/2);
  30.     }
  31.     if(_top != topValue){
  32.         moveSearchTimeAction = setTimeout("moveSearch("+topValue+")",30);
  33.     }else{
  34.         moveSearchTimeAction = null;
  35.     }
  36. }
  37. </script>
  38. </head>
  39.     <body>
  40.         <div id="searchDiv" style="border:1px solid blue;width:200px;height:400px;overflow:hidden">
  41.             <div style="border:1px solid blue;width:200px;height:398px;">11111111<br>11111111<br>11111111<br></div>
  42.             <div style="border:1px solid blue;width:200px;height:398px;">22222222<br>22222222<br>22222222<br></div>
  43.             <div style="border:1px solid blue;width:200px;height:398px;">33333333<br>33333333<br>33333333<br></div>
  44.         </div>
  45.         <div>選擇按鈕</div>
  46.         <div><input type="button" value="look 1" οnclick="moveSearch(0)"/></div>
  47.         <div><input type="button" value="look 2" οnclick="moveSearch(400)"/></div>
  48.         <div><input type="button" value="look 3" οnclick="moveSearch(800)"/></div>
  49.         <div id="show"></div>
  50.     </body>
  51. <html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章