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

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 12:36:14
字體:
來源:轉載
供稿:網友

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

一、JS運動的各種問題

問題一:

錯誤代碼:

function startMove(){  var timer=null;  var div1=document.getElementById("div1");  if (div1.offsetLeft==300){   clearInterval(timer);  }else{   timer=setInterval(function(){    div1.style.left=div1.offsetLeft+10+"px";   },30)  } }

希望實現的功能:

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

錯誤之處:

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

正確代碼:

var timer=null; function startMove(){  var div1=document.getElementById("div1");  timer=setInterval(function(){   if (div1.offsetLeft==300){    clearInterval(timer);   }   div1.style.left=div1.offsetLeft+10+"px";  },30) }

問題二:
錯誤代碼:

function startMove(){  var speed=1;  var timer=null;  var oDiv1=document.getElementById("div1");  clearInterval(timer);  timer=setInterval(function(){   if (oDiv1.offsetLeft>=300){    clearInterval(timer);   }else{    oDiv1.style.left=oDiv1.offsetLeft+speed+"px";   }  },30) }

希望實現的功能:

連續點擊開始按鈕,div1會加速,這是因為每當點擊按鈕一次,就會開啟一個定時器,累積起來就會加速,所以要在開啟定時器之前不管有沒有定時器開啟都要先關閉一次定時器。但是添加了關閉定時器的clearInterval方法之后,依然會加速。
錯誤之處:
將timer變量放在了startMove方法里面,相當于每點擊一次按鈕,就會執行一次startMove方法,生成了一個閉包,因此創建了一個局部timer,每一個閉包當中的timer并不會共享,所以還是相當于生成了點擊次數的閉包timer。

正確代碼:

var timer=null; function startMove(){  var speed=1;  var oDiv1=document.getElementById("div1");  clearInterval(timer);  timer=setInterval(function(){   if (oDiv1.offsetLeft>=300){    clearInterval(timer);   }else{    oDiv1.style.left=oDiv1.offsetLeft+speed+"px";   }  },30) }

實現分享欄進出功能:
代碼:

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style type="text/css">   #div1{    width: 150px;    height: 200px;    background: burlywood;    position: absolute;    left: -150px;   }   span{    width: 20px;    height: 60px;    position: absolute;    background: gold;    right: -20px;    top: 70px;   }  </style>  <script>   window.onload=function(){    var oDiv1=document.getElementById("div1");    oDiv1.onmouseover=function(){     move(0);    };    oDiv1.onmouseout=function(){     move(-150);    };   };   var timer=null;   function move(target){    var oDiv1=document.getElementById("div1");    var speed=0;    if (oDiv1.offsetLeft<target){     speed=10;    }else{     speed=-10;    }    clearInterval(timer);    timer=setInterval(function(){     if(oDiv1.offsetLeft==target){      clearInterval(timer);     }else{      oDiv1.style.left=oDiv1.offsetLeft+speed+"px";     }    },30);   }  </script> </head> <body> <div id="div1">  <span id="span1">分享到</span> </div> </body> </html>

實現圖片淡入淡出功能:
代碼:

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style>   #div1{    width: 200px;    height: 200px;    background: red;    position: absolute;    filter: alpha(opacity:30);    opacity: 0.3;   }  </style>  <script>   window.onload=function(){    var oDiv1=document.getElementById("div1");    oDiv1.onmouseover=function(){     move(100);    };    oDiv1.onmouseout=function(){     move(30);    };   };   var timer=null;   var alpha=30;   function move(target){    var oDiv1=document.getElementById("div1");    var speed=0;    clearInterval(timer);    if(alpha<target){     speed=10;    }else{     speed=-10;    }    timer=setInterval(function(){     if (alpha==target){      clearInterval(timer);     }else{      alpha+=speed;      oDiv1.style.filter="alpha(opacity:"+alpha+")";      oDiv1.style.opacity=alpha/100;     }    },30);   };  </script> </head> <body> <div id="div1"> </div> </body> </html> 

注意點:

1.因為在透明度上JavaScript并沒有像左邊距(offsetLeft)這樣的屬性。所以用一個alpha變量代替。
2.JavaScript代碼中的行間透明度設置上需要考慮瀏覽器的兼容問題,ie瀏覽器設置方法為oDiv1.style.filter="aplha(opacity:"+aplha+")";
  chrome和火狐為oDiv1.style.opacity=alpha/100。
實現滾動條事件:
代碼:

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style type="text/css">   #div1{    width: 100px;    height: 100px;    background: yellowgreen;    position: absolute;    bottom: 0px;    right: 0px;   }  </style>  <script>   window.onscroll=function(){    var oDiv=document.getElementById("div1");    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;    move(document.documentElement.clientHeight-oDiv.offsetHeight+scrollTop);   };   var timer=null;   function move(target){    var oDiv=document.getElementById("div1");    clearInterval(timer);    timer=setInterval(function(){     var speed=(target-oDiv.offsetTop)/10;     speed=speed>0?Math.ceil(speed):Math.floor(speed);     if (oDiv.offsetTop==target){      clearInterval(timer);     }else{      oDiv.style.top=oDiv.offsetTop+speed+'px';     }    },30)   };  </script> </head> <body style="height:2000px;"> <div id="div1"></div> </body> </html>

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

問題一:

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

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style>   div{    width: 100px;    height: 50px;    background: yellow;    margin: 10px;   }  </style>  <script>   window.onload=function(){    var oDiv=document.getElementsByTagName('div');    for (var i=0;i<oDiv.length;i++){     oDiv[i].timer=null;     oDiv[i].onmouseover=function(){      move(300,this);     };     oDiv[i].onmouseout=function(){      move(100,this);     };    }   };   function move(iTarget,oDiv){    clearInterval(oDiv.timer);    oDiv.timer=setInterval(function(){     var speed=(iTarget-oDiv.offsetWidth)/5;     speed=speed>0?Math.ceil(speed):Math.floor(speed);     if (iTarget==oDiv.offsetWidth){      clearInterval(oDiv.timer);     }else{      oDiv.style.width=oDiv.offsetWidth+speed+"px";     }    },30);   }  </script> </head> <body> <div id="div1"></div> <div id="div2"></div> <div id="div3"></div> </body> </html>

注意事項:

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

問題二:

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

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style>   div{    width: 200px;    height: 200px;    margin: 10px;    background: yellow;    float: left;    filter: alpha(opacity:30);    opacity: 0.3;   }  </style>  <script>   window.onload=function(){    var oDiv=document.getElementsByTagName('div');    for(var i=0;i<oDiv.length;i++){     oDiv[i].timer=null;     oDiv[i].alpha=30;     oDiv[i].onmouseover=function(){      move(100,this);     };     oDiv[i].onmouseout=function(){      move(30,this);     };    }   };   function move(iTarget,obj){    clearInterval(obj.timer);    obj.timer=setInterval(function(){     var speed=(iTarget-obj.alpha)/30;     speed=speed>0?Math.ceil(speed):Math.floor(speed);     if (obj.alpha==iTarget){      clearInterval(obj.timer);     }else{      obj.alpha+=speed;      obj.style.filter="alpha(opacity:"+obj.alpha+")";      obj.style.opacity=obj.alpha/100;     }    },30);   }  </script> </head> <body> <div></div> <div></div> <div></div> <div></div> </body> </html>

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

代碼:

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style>   div{    width: 100px;    height: 100px;    margin: 10px;    background: yellow;    float: left;    border: 10px solid black;   }  </style>  <script>   window.onload=function(){    var oDiv1=document.getElementById('div1');    var oDiv2=document.getElementById('div2');    oDiv1.timer=null;    oDiv2.timer=null;    oDiv1.onmouseover=function(){     move(this,400,'height');    };    oDiv1.onmouseout=function(){     move(this,100,'height');    };    oDiv2.onmouseover=function(){     move(this,400,'width');    };    oDiv2.onmouseout=function(){     move(this,100,'width');    };   };   function getStyle(obj,name){    if(obj.currentStyle){     return obj.currentStyle[name];    }else{     return getComputedStyle(obj,false)[name];    }   };   function move(obj,iTarget,name){    clearInterval(obj.timer);    obj.timer=setInterval(function(){     var cur=parseInt(getStyle(obj,name));     var speed=(iTarget-cur)/30;     speed=speed>0?Math.ceil(speed):Math.floor(speed);     if(cur==iTarget){      clearInterval(obj.timer);     }else{      obj.style[name]=cur+speed+"px";     }    },30);   };  </script> </head> <body> <div id="div1"></div> <div id="div2"></div> </body> </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強制轉換成數字類型。

完整的運動框架:

<!DOCTYPE html> <html> <head lang="en">  <meta charset="UTF-8">  <title></title>  <style>   #div1{    width: 200px;    height: 200px;    margin: 20px;    background: yellow;    border: 5px solid black;    filter: alpha(opacity:30);    opacity: 0.3;   }  </style>  <script>   window.onload=function(){    var oDiv1=document.getElementById('div1');    oDiv1.timer=null;    oDiv1.onmouseover=function(){     move(this,100,'opacity');    };    oDiv1.onmouseout=function(){     move(this,30,'opacity');    };   };   function getStyle(obj,name){    if(obj.currentStyle){     return obj.currentStyle[name];    }else{     return getComputedStyle(obj,false)[name];    }   };   function move(obj,iTarget,name){    clearInterval(obj.timer);    obj.timer=setInterval(function(){     var cur=0;     if(name=='opacity'){      cur=Math.round(parseFloat(getStyle(obj,name))*100);     }else{      cur=parseInt(getStyle(obj,name));     }     var speed=(iTarget-cur)/30;     speed=speed>0?Math.ceil(speed):Math.floor(speed);     if(cur==iTarget){      clearInterval(obj.timer);     }else{      if(name=='opacity'){       obj.style.opacity=(cur+speed)/100;       obj.style.filter='alpha(opacity:'+cur+speed+')';      }else{       obj.style[name]=cur+speed+"px";      }     }    },30);   };  </script> </head> <body> <div id="div1"></div> </body> </html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
3344国产精品免费看| 精品国偷自产在线| 久久久久久伊人| 热99精品只有里视频精品| 亚洲999一在线观看www| 国产精品aaa| 亚洲黄色www网站| 欧美日韩中文字幕日韩欧美| 国语自产精品视频在免费| 国产精品美女久久久久av超清| 亚洲精品久久久久中文字幕二区| 久久精品国产亚洲精品2020| 丁香五六月婷婷久久激情| 神马国产精品影院av| 日本欧美中文字幕| 福利微拍一区二区| 亚洲高清久久久久久| 欧美性理论片在线观看片免费| 中文字幕亚洲无线码在线一区| 亚洲国产美女久久久久| 久久999免费视频| 亚洲毛片一区二区| xxx一区二区| 色综合久综合久久综合久鬼88| 一区二区三区 在线观看视| 国产91对白在线播放| 伦伦影院午夜日韩欧美限制| 成人免费看吃奶视频网站| 亚洲精品影视在线观看| 91在线国产电影| 亚洲国产成人精品一区二区| 91精品视频免费| 国产91热爆ts人妖在线| 夜夜躁日日躁狠狠久久88av| 日本国产一区二区三区| 国产在线不卡精品| 久久精品人人做人人爽| 日韩视频中文字幕| 欧美一区视频在线| 精品久久久免费| 欧美成人sm免费视频| 亚洲国产精品电影在线观看| 亚洲女人天堂成人av在线| 伊人久久久久久久久久久| 欧美性高潮床叫视频| 欧美福利视频在线| 国内外成人免费激情在线视频| 午夜精品一区二区三区在线视频| 日韩在线小视频| 欧美成人精品三级在线观看| 国产国产精品人在线视| 国产一区二区成人| 欧美午夜电影在线| 国产免费亚洲高清| 亚洲日本aⅴ片在线观看香蕉| 成人av.网址在线网站| 日韩精品在线观看网站| 亚洲免费人成在线视频观看| 在线视频国产日韩| 亚洲另类xxxx| 国产视频在线观看一区二区| 亚洲第一av网| 久久久免费在线观看| 国产精品狼人色视频一区| 国产亚洲欧洲在线| 欧美激情国内偷拍| 91免费看视频.| 亚洲欧美国内爽妇网| 久久精品中文字幕免费mv| 91福利视频网| 精品久久久久久亚洲国产300| 国产精品99久久99久久久二8| 亚洲sss综合天堂久久| 亚洲欧美日韩国产中文专区| 国产在线视频2019最新视频| 日韩成人在线视频观看| 欧美xxxwww| 国产一区二区三区在线观看视频| 欧美日韩另类在线| 疯狂蹂躏欧美一区二区精品| 亚洲电影免费观看高清| 欧美午夜精品久久久久久久| 精品电影在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美成人精品不卡视频在线观看| 亚洲韩国欧洲国产日产av| 久久91亚洲精品中文字幕| 久久久精品久久久| 色偷偷88888欧美精品久久久| 国产精品专区h在线观看| 欧美激情视频在线观看| 成人黄色av免费在线观看| 欧美国产一区二区三区| 色yeye香蕉凹凸一区二区av| 亚洲理论片在线观看| 久久精品最新地址| 日本精品久久久久久久| 亚洲国产99精品国自产| 中文字幕亚洲图片| 国产精品福利在线观看| 亚洲国产黄色片| 九九视频直播综合网| 亚洲国产精品福利| 国产亚洲精品高潮| 国产精品久久久久久久一区探花| 91精品国产自产在线老师啪| 亚洲国产精品va在线| 欧美在线免费观看| 国产主播喷水一区二区| 国产精品久久久久久久久久小说| 亚洲综合小说区| 成人国产精品一区二区| 亚洲欧洲在线视频| 中文字幕日韩免费视频| 国产一区二区丝袜高跟鞋图片| 国产精品久久久久久久久久99| 久久国产精品网站| 国产精品精品一区二区三区午夜版| 欧美—级a级欧美特级ar全黄| 亚洲国产精品va| www.日韩.com| 亚洲欧美中文日韩在线v日本| 亚洲乱亚洲乱妇无码| 欧美一区二区视频97| 成人福利视频在线观看| 久久久免费观看视频| 国产精品欧美在线| 成人精品一区二区三区电影免费| 亚洲欧美国内爽妇网| 亚洲欧美中文在线视频| 精品亚洲男同gayvideo网站| 欧美黄网免费在线观看| 97视频在线观看免费| 日韩影视在线观看| 欧美成年人在线观看| 欧美亚洲成人xxx| 日韩中文字幕视频在线观看| 日韩电影中文字幕av| 欧美日韩一区二区精品| 久久精品久久久久久国产 免费| 国产精品国产三级国产aⅴ9色| 日韩在线播放一区| 国内精品久久久久久影视8| 欧美在线精品免播放器视频| 欧美噜噜久久久xxx| 欧美一级在线亚洲天堂| 日韩电影在线观看永久视频免费网站| 国产伦精品一区二区三区精品视频| 欧美精品一区在线播放| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲美女性生活视频| 国产欧美日韩中文字幕| 日韩av在线网页| 成人信息集中地欧美| 97香蕉超级碰碰久久免费的优势| 亚洲欧美日韩中文视频| 欧美精品久久久久久久免费观看| 精品偷拍一区二区三区在线看| 久久影视电视剧免费网站清宫辞电视| 国产成人精品一区二区| 91成人性视频| 国产精品久久久亚洲| 欧美国产在线电影| 精品动漫一区二区|