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

首頁 > 語言 > JavaScript > 正文

javascript關于運動的各種問題經典總結

2024-05-06 16:18:50
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了javascript關于運動的各種問題,實例總結了javascript關于滾動的常見錯誤、實現方法與相關注意事項,非常具有實用價值,需要的朋友可以參考下

本文實例總結了javascript關于運動的各種問題。分享給大家供大家參考。具體如下:

一、JS運動的各種問題

問題一:

錯誤代碼:

 

 
  1. function startMove(){  
  2. var timer=null;  
  3. var div1=document.getElementById("div1");  
  4. if (div1.offsetLeft==300){  
  5. clearInterval(timer);  
  6. }else{  
  7. timer=setInterval(function(){  
  8. div1.style.left=div1.offsetLeft+10+"px";  
  9. },30)  
  10. }  

希望實現的功能:

打開定時器timer,讓div1運動到300px,然后讓div1停下即關掉定時器。

錯誤之處:

if語句錯誤,代碼首先設置一個null定時器timer,然后如果div1的左邊距為300px,則關掉定時器timer。否則一直運動。但是if并不是循環語句,if語句執行一次之后將不再執行。所以永遠不會關閉定時器。

正確代碼:

 

 
  1. var timer=null;  
  2. function startMove(){  
  3. var div1=document.getElementById("div1");  
  4. timer=setInterval(function(){  
  5. if (div1.offsetLeft==300){  
  6. clearInterval(timer);  
  7. }  
  8. div1.style.left=div1.offsetLeft+10+"px";  
  9. },30)  

問題二:

錯誤代碼:

 

 
  1. function startMove(){  
  2. var speed=1;  
  3. var timer=null;  
  4. var oDiv1=document.getElementById("div1");  
  5. clearInterval(timer);  
  6. timer=setInterval(function(){  
  7. if (oDiv1.offsetLeft>=300){  
  8. clearInterval(timer);  
  9. }else{  
  10. oDiv1.style.left=oDiv1.offsetLeft+speed+"px";  
  11. }  
  12. },30)  

希望實現的功能:

連續點擊開始按鈕,div1會加速,這是因為每當點擊按鈕一次,就會開啟一個定時器,累積起來就會加速,所以要在開啟定時器之前不管有沒有定時器開啟都要先關閉一次定時器。但是添加了關閉定時器的clearInterval方法之后,依然會加速。

錯誤之處:

將timer變量放在了startMove方法里面,相當于每點擊一次按鈕,就會執行一次startMove方法,生成了一個閉包,因此創建了一個局部timer,每一個閉包當中的timer并不會共享,所以還是相當于生成了點擊次數的閉包timer。

正確代碼:

 

 
  1. var timer=null;  
  2. function startMove(){  
  3. var speed=1;  
  4. var oDiv1=document.getElementById("div1");  
  5. clearInterval(timer);  
  6. timer=setInterval(function(){  
  7. if (oDiv1.offsetLeft>=300){  
  8. clearInterval(timer);  
  9. }else{  
  10. oDiv1.style.left=oDiv1.offsetLeft+speed+"px";  
  11. }  
  12. },30)  

實現分享欄進出功能:

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style type="text/css">  
  7. #div1{  
  8. width: 150px;  
  9. height: 200px;  
  10. background: burlywood;  
  11. position: absolute;  
  12. left: -150px;  
  13. }  
  14. span{  
  15. width: 20px;  
  16. height: 60px;  
  17. position: absolute;  
  18. background: gold;  
  19. right: -20px;  
  20. top: 70px;  
  21. }  
  22. </style>  
  23. <script>  
  24. window.onload=function(){  
  25. var oDiv1=document.getElementById("div1");  
  26. oDiv1.onmouseover=function(){  
  27. move(0);  
  28. };  
  29. oDiv1.onmouseout=function(){  
  30. move(-150);  
  31. };  
  32. };  
  33. var timer=null;  
  34. function move(target){  
  35. var oDiv1=document.getElementById("div1");  
  36. var speed=0;  
  37. if (oDiv1.offsetLeft<target){  
  38. speed=10;  
  39. }else{  
  40. speed=-10;  
  41. }  
  42. clearInterval(timer);  
  43. timer=setInterval(function(){  
  44. if(oDiv1.offsetLeft==target){  
  45. clearInterval(timer);  
  46. }else{  
  47. oDiv1.style.left=oDiv1.offsetLeft+speed+"px";  
  48. }  
  49. },30);  
  50. }  
  51. </script>  
  52. </head>  
  53. <body>  
  54. <div id="div1">  
  55. <span id="span1">分享到</span>  
  56. </div>  
  57. </body>  
  58. </html> 

實現圖片淡入淡出功能:

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style> 
  7. #div1{  
  8. width: 200px;  
  9. height: 200px;  
  10. background: red;  
  11. position: absolute;  
  12. filter: alpha(opacity:30);  
  13. opacity: 0.3;  
  14. }  
  15. </style>  
  16. <script>  
  17. window.onload=function(){  
  18. var oDiv1=document.getElementById("div1");  
  19. oDiv1.onmouseover=function(){  
  20. move(100);  
  21. };  
  22. oDiv1.onmouseout=function(){  
  23. move(30);  
  24. };  
  25. };  
  26. var timer=null;  
  27. var alpha=30;  
  28. function move(target){  
  29. var oDiv1=document.getElementById("div1");  
  30. var speed=0;  
  31. clearInterval(timer);  
  32. if(alpha<target){  
  33. speed=10;  
  34. }else{  
  35. speed=-10;  
  36. }  
  37. timer=setInterval(function(){  
  38. if (alpha==target){  
  39. clearInterval(timer);  
  40. }else{  
  41. alpha+=speed;  
  42. oDiv1.style.filter="alpha(opacity:"+alpha+")";  
  43. oDiv1.style.opacity=alpha/100;  
  44. }  
  45. },30);  
  46. };  
  47. </script>  
  48. </head>  
  49. <body>  
  50. <div id="div1">  
  51. </div>  
  52. </body>  
  53. </html> 

注意點:

1.因為在透明度上JavaScript并沒有像左邊距(offsetLeft)這樣的屬性。所以用一個alpha變量代替。

2.JavaScript代碼中的行間透明度設置上需要考慮瀏覽器的兼容問題,ie瀏覽器設置方法為oDiv1.style.filter="aplha(opacity:"+aplha+")";

chrome和火狐為oDiv1.style.opacity=alpha/100。

實現滾動條事件:

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style type="text/css"
  7. #div1{  
  8. width: 100px;  
  9. height: 100px;  
  10. background: yellowgreen;  
  11. position: absolute;  
  12. bottom: 0px;  
  13. right: 0px;  
  14. }  
  15. </style>  
  16. <script>  
  17. window.onscroll=function(){  
  18. var oDiv=document.getElementById("div1");  
  19. var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;  
  20. move(document.documentElement.clientHeight-oDiv.offsetHeight+scrollTop);  
  21. };  
  22. var timer=null;  
  23. function move(target){  
  24. var oDiv=document.getElementById("div1");  
  25. clearInterval(timer);  
  26. timer=setInterval(function(){  
  27. var speed=(target-oDiv.offsetTop)/10;  
  28. speed=speed>0?Math.ceil(speed):Math.floor(speed);  
  29. if (oDiv.offsetTop==target){  
  30. clearInterval(timer);  
  31. }else{  
  32. oDiv.style.top=oDiv.offsetTop+speed+'px';  
  33. }  
  34. },30)  
  35. };  
  36. </script>  
  37. </head>  
  38. <body style="height:2000px;">  
  39. <div id="div1"></div>  
  40. </body>  
  41. </html> 

二、JS多物體運動的各種問題

問題一:

希望實現的功能:三個平行div自由的平行縮放。

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style>  
  7. div{  
  8. width: 100px;  
  9. height: 50px;  
  10. background: yellow;  
  11. margin: 10px;  
  12. }  
  13. </style>  
  14. <script>  
  15. window.onload=function(){  
  16. var oDiv=document.getElementsByTagName('div');  
  17. for (var i=0;i<oDiv.length;i++){  
  18. oDiv[i].timer=null;  
  19. oDiv[i].onmouseover=function(){  
  20. move(300,this);  
  21. };  
  22. oDiv[i].onmouseout=function(){  
  23. move(100,this);  
  24. };  
  25. }  
  26. };  
  27. function move(iTarget,oDiv){  
  28. clearInterval(oDiv.timer);  
  29. oDiv.timer=setInterval(function(){  
  30. var speed=(iTarget-oDiv.offsetWidth)/5;  
  31. speed=speed>0?Math.ceil(speed):Math.floor(speed);  
  32. if (iTarget==oDiv.offsetWidth){  
  33. clearInterval(oDiv.timer);  
  34. }else{  
  35. oDiv.style.width=oDiv.offsetWidth+speed+"px";  
  36. }  
  37. },30);  
  38. }  
  39. </script>  
  40. </head>  
  41. <body>  
  42. <div id="div1"></div>  
  43. <div id="div2"></div>  
  44. <div id="div3"></div>  
  45. </body>  
  46. </html> 

注意事項:

多物體運動如果只是設置一個定時器(設置全局定時器)的話,那么三個div共用一個一個全局定時器,那么當一個div沒有完成縮小動作的時候另一個div開啟定時器執行伸展動作,由于定時器是全局的,那么上一個div的定時器將被覆蓋即取消掉,故上一個定時器無法完全地昨晚縮小動作,解決辦法是給每一個div設置一個屬性timer。

問題二:

希望實現的功能:多圖片的淡入淡出。

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style>  
  7. div{  
  8. width: 200px;  
  9. height: 200px;  
  10. margin: 10px;  
  11. background: yellow;  
  12. float: left;  
  13. filter: alpha(opacity:30);  
  14. opacity: 0.3;  
  15. }  
  16. </style>  
  17. <script>  
  18. window.onload=function(){  
  19. var oDiv=document.getElementsByTagName('div');  
  20. for(var i=0;i<oDiv.length;i++){  
  21. oDiv[i].timer=null;  
  22. oDiv[i].alpha=30;  
  23. oDiv[i].onmouseover=function(){  
  24. move(100,this);  
  25. };  
  26. oDiv[i].onmouseout=function(){  
  27. move(30,this);  
  28. };  
  29. }  
  30. };  
  31. function move(iTarget,obj){  
  32. clearInterval(obj.timer);  
  33. obj.timer=setInterval(function(){  
  34. var speed=(iTarget-obj.alpha)/30;  
  35. speed=speed>0?Math.ceil(speed):Math.floor(speed);  
  36. if (obj.alpha==iTarget){  
  37. clearInterval(obj.timer);  
  38. }else{  
  39. obj.alpha+=speed;  
  40. obj.style.filter="alpha(opacity:"+obj.alpha+")";  
  41. obj.style.opacity=obj.alpha/100;  
  42. }  
  43. },30);  
  44. }  
  45. </script>  
  46. </head>  
  47. <body>  
  48. <div></div>  
  49. <div></div>  
  50. <div></div>  
  51. <div></div>  
  52. </body>  
  53. </html> 

希望實現的功能:多物體不同方向的伸縮功能。

代碼:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style>  
  7. div{  
  8. width: 100px;  
  9. height: 100px;  
  10. margin: 10px;  
  11. background: yellow;  
  12. float: left;  
  13. border: 10px solid black;  
  14. }  
  15. </style>  
  16. <script>  
  17. window.onload=function(){  
  18. var oDiv1=document.getElementById('div1');  
  19. var oDiv2=document.getElementById('div2');  
  20. oDiv1.timer=null;  
  21. oDiv2.timer=null;  
  22. oDiv1.onmouseover=function(){  
  23. move(this,400,'height');  
  24. };  
  25. oDiv1.onmouseout=function(){  
  26. move(this,100,'height');  
  27. };  
  28. oDiv2.onmouseover=function(){  
  29. move(this,400,'width');  
  30. };  
  31. oDiv2.onmouseout=function(){  
  32. move(this,100,'width');  
  33. };  
  34. };  
  35. function getStyle(obj,name){  
  36. if(obj.currentStyle){  
  37. return obj.currentStyle[name];  
  38. }else{  
  39. return getComputedStyle(obj,false)[name];  
  40. }  
  41. };  
  42. function move(obj,iTarget,name){  
  43. clearInterval(obj.timer);  
  44. obj.timer=setInterval(function(){  
  45. var cur=parseInt(getStyle(obj,name));  
  46. var speed=(iTarget-cur)/30;  
  47. speed=speed>0?Math.ceil(speed):Math.floor(speed);  
  48. if(cur==iTarget){  
  49. clearInterval(obj.timer);  
  50. }else{  
  51. obj.style[name]=cur+speed+"px";  
  52. }  
  53. },30);  
  54. };  
  55. </script>  
  56. </head>  
  57. <body>  
  58. <div id="div1"></div>  
  59. <div id="div2"></div>  
  60. </body>  
  61. </html> 

注意事項:

1.offsetwidth所獲得的并不只是物體的純寬度,還有物體的變寬以及外邊距。那么在obj.style.width=obj.offsetwidth-1+"px";這句中,本意是希望圖片縮小以1px的速度勻速縮小,但是如果將邊框的寬度設置為1px而非0px,那么offsetwidth的值其實是obj的width(注意:不是style.width即不是行間的width)+2,上面這句變成了obj.style.width=obj的width+2-1+“px”;圖像反而增大了。解決的辦法就是不用offsetwidth,而用obj的width。width通過getStyle方法獲得。

2.getStyle方法得到的是string。需要用parseint強制轉換成數字類型。

完整的運動框架:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4. <meta charset="UTF-8">  
  5. <title></title>  
  6. <style> 
  7. #div1{  
  8. width: 200px;  
  9. height: 200px;  
  10. margin: 20px;  
  11. background: yellow;  
  12. border: 5px solid black;  
  13. filter: alpha(opacity:30);  
  14. opacity: 0.3;  
  15. }  
  16. </style>  
  17. <script>  
  18. window.onload=function(){  
  19. var oDiv1=document.getElementById('div1');  
  20. oDiv1.timer=null;  
  21. oDiv1.onmouseover=function(){  
  22. move(this,100,'opacity');  
  23. };  
  24. oDiv1.onmouseout=function(){  
  25. move(this,30,'opacity');  
  26. };  
  27. };  
  28. function getStyle(obj,name){  
  29. if(obj.currentStyle){  
  30. return obj.currentStyle[name];  
  31. }else{  
  32. return getComputedStyle(obj,false)[name];  
  33. }  
  34. };  
  35. function move(obj,iTarget,name){  
  36. clearInterval(obj.timer);  
  37. obj.timer=setInterval(function(){  
  38. var cur=0;  
  39. if(name=='opacity'){  
  40. cur=Math.round(parseFloat(getStyle(obj,name))*100);  
  41. }else{  
  42. cur=parseInt(getStyle(obj,name));  
  43. }  
  44. var speed=(iTarget-cur)/30;  
  45. speed=speed>0?Math.ceil(speed):Math.floor(speed);  
  46. if(cur==iTarget){  
  47. clearInterval(obj.timer);  
  48. }else{  
  49. if(name=='opacity'){  
  50. obj.style.opacity=(cur+speed)/100;  
  51. obj.style.filter='alpha(opacity:'+cur+speed+')';  
  52. }else{  
  53. obj.style[name]=cur+speed+"px";  
  54. }  
  55. }  
  56. },30);  
  57. };  
  58. </script>  
  59. </head>  
  60. <body>  
  61. <div id="div1"></div>  
  62. </body>  
  63. </html> 

希望本文所述對大家的javascript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩亚洲激情| 69av视频在线播放| 欧美激情乱人伦一区| 国产亚洲欧美日韩美女| 国产一区二区在线免费视频| 国产精品一区二区久久国产| 69视频在线播放| 欧美激情一二区| 久久久精品一区二区三区| 亚洲色图激情小说| 亚洲国产欧美一区二区三区久久| 麻豆乱码国产一区二区三区| 欧美性高潮床叫视频| 亚洲免费小视频| 欧美亚洲视频在线看网址| 国产精品永久免费视频| 欧美视频中文字幕在线| 91久久久久久久| 日韩av成人在线观看| 亚洲成人网在线观看| 中文字幕最新精品| 亚洲男人天堂2023| 国产精品久久久久久久久久ktv| 久久99精品视频一区97| 欧洲美女免费图片一区| 日韩av高清不卡| 国产美女被下药99| 久青草国产97香蕉在线视频| 97久久伊人激情网| 久久在线免费观看视频| 精品视频9999| 91国内精品久久| 日本最新高清不卡中文字幕| 国产精品久久久久久久9999| 国产成人亚洲综合91精品| 成人观看高清在线观看免费| 久久在线免费观看视频| 国产99久久精品一区二区| 国产精品爽黄69| 久久久久久久影院| 国产精品视频网站| 欧美第一淫aaasss性| 91久久久久久久| 91精品国产综合久久男男| 中文字幕亚洲欧美日韩高清| 欧美特黄级在线| 国产精品一区二区三区久久| 亚洲激情中文字幕| 成人国产精品久久久| 91精品久久久久久久久| 日韩成人激情视频| 国产脚交av在线一区二区| 日韩欧美在线免费观看| 亚洲精品欧美日韩| 狠狠色狠狠色综合日日五| 91网在线免费观看| 国内久久久精品| 一本色道久久综合亚洲精品小说| 日本精品一区二区三区在线播放视频| 午夜精品一区二区三区在线| 欧美午夜激情小视频| 亚洲精品久久视频| 欧美日韩国产成人高清视频| 亚洲综合精品伊人久久| 一区二区三区视频免费在线观看| 欧美日韩中文字幕在线视频| 永久免费精品影视网站| 最近2019年中文视频免费在线观看| 亚洲欧美一区二区三区情侣bbw| 伊人伊成久久人综合网站| www.国产一区| 精品无人国产偷自产在线| 国产一区视频在线播放| 亚洲精品国精品久久99热| 国产日韩欧美影视| 欧美视频二区36p| 欧美色视频日本版| 中日韩美女免费视频网站在线观看| 日韩av网站大全| 国产91精品视频在线观看| 国产亚洲人成网站在线观看| 亚洲在线观看视频网站| 欧美精品videosex极品1| 亚洲综合一区二区不卡| 深夜福利91大全| 在线播放精品一区二区三区| 中文字幕亚洲无线码a| 最近2019中文字幕mv免费看| 日本成人精品在线| 亚洲成人精品视频在线观看| 色中色综合影院手机版在线观看| 国产精品jizz在线观看麻豆| 蜜臀久久99精品久久久久久宅男| 91亚洲精华国产精华| 精品国产一区二区三区久久久| 日韩欧亚中文在线| 精品中文字幕在线观看| 97涩涩爰在线观看亚洲| 国产一区二区在线播放| 97视频免费看| 日韩一区二区三区在线播放| 色系列之999| 国产成人精品999| 亚洲国产天堂网精品网站| 日韩一区二区在线视频| 亚洲色图偷窥自拍| 亚洲一区二区久久久久久久| 亚洲a级在线播放观看| 日韩欧美中文字幕在线播放| 久久露脸国产精品| 久久久久久一区二区三区| 国产精品揄拍一区二区| 国产a∨精品一区二区三区不卡| 国产精品一区二区三区久久| 91日本在线视频| 欧美高清视频免费观看| 国产精品h片在线播放| 亚洲精品美女久久久久| 热99久久精品| 欧美视频在线视频| 亚洲字幕一区二区| 国产精品1区2区在线观看| 91久久精品视频| 97视频免费在线看| 亚洲欧美在线一区| 在线视频亚洲欧美| 中文字幕国内精品| 深夜福利日韩在线看| 日韩国产在线播放| 日韩成人在线视频观看| 久久久女女女女999久久| 亚洲精品视频网上网址在线观看| 另类专区欧美制服同性| 中文字幕亚洲在线| 日韩av一区二区在线| 日韩视频一区在线| 国产欧美一区二区| 另类专区欧美制服同性| 久久久视频精品| 亚洲国产精品国自产拍av秋霞| 欧美激情2020午夜免费观看| 成人黄色影片在线| 91深夜福利视频| 久久精品福利视频| 97精品国产97久久久久久春色| 91久久在线观看| 欧美猛男性生活免费| 91美女片黄在线观看游戏| 欧美最猛黑人xxxx黑人猛叫黄| 国产日韩在线免费| 欧美另类高清videos| 欧美尺度大的性做爰视频| 青青久久av北条麻妃海外网| 91成人国产在线观看| 国产成人亚洲综合91精品| 青草青草久热精品视频在线网站| 精品调教chinesegay| 国产精品视频久久久| 在线日韩精品视频| 久久伊人91精品综合网站| 91在线免费看网站| 国产成人极品视频| 成人福利在线观看| 国内精品视频一区|