国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

javascript關(guān)于運(yùn)動(dòng)的各種問(wèn)題經(jīng)典總結(jié)

2019-11-20 12:36:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例總結(jié)了javascript關(guān)于運(yùn)動(dòng)的各種問(wèn)題。分享給大家供大家參考。具體如下:

一、JS運(yùn)動(dòng)的各種問(wèn)題

問(wèn)題一:

錯(cuò)誤代碼:

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)  } }

希望實(shí)現(xiàn)的功能:

打開定時(shí)器timer,讓div1運(yùn)動(dòng)到300px,然后讓div1停下即關(guān)掉定時(shí)器。

錯(cuò)誤之處:

if語(yǔ)句錯(cuò)誤,代碼首先設(shè)置一個(gè)null定時(shí)器timer,然后如果div1的左邊距為300px,則關(guān)掉定時(shí)器timer。否則一直運(yùn)動(dòng)。但是if并不是循環(huán)語(yǔ)句,if語(yǔ)句執(zhí)行一次之后將不再執(zhí)行。所以永遠(yuǎn)不會(huì)關(guān)閉定時(shí)器。

正確代碼:

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) }

問(wèn)題二:
錯(cuò)誤代碼:

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) }

希望實(shí)現(xiàn)的功能:

連續(xù)點(diǎn)擊開始按鈕,div1會(huì)加速,這是因?yàn)槊慨?dāng)點(diǎn)擊按鈕一次,就會(huì)開啟一個(gè)定時(shí)器,累積起來(lái)就會(huì)加速,所以要在開啟定時(shí)器之前不管有沒(méi)有定時(shí)器開啟都要先關(guān)閉一次定時(shí)器。但是添加了關(guān)閉定時(shí)器的clearInterval方法之后,依然會(huì)加速。
錯(cuò)誤之處:
將timer變量放在了startMove方法里面,相當(dāng)于每點(diǎn)擊一次按鈕,就會(huì)執(zhí)行一次startMove方法,生成了一個(gè)閉包,因此創(chuàng)建了一個(gè)局部timer,每一個(gè)閉包當(dāng)中的timer并不會(huì)共享,所以還是相當(dāng)于生成了點(diǎn)擊次數(shù)的閉包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) }

實(shí)現(xiàn)分享欄進(jìn)出功能:
代碼:

<!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>

實(shí)現(xiàn)圖片淡入淡出功能:
代碼:

<!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> 

注意點(diǎn):

1.因?yàn)樵谕该鞫壬螶avaScript并沒(méi)有像左邊距(offsetLeft)這樣的屬性。所以用一個(gè)alpha變量代替。
2.JavaScript代碼中的行間透明度設(shè)置上需要考慮瀏覽器的兼容問(wèn)題,ie瀏覽器設(shè)置方法為oDiv1.style.filter="aplha(opacity:"+aplha+")";
  chrome和火狐為oDiv1.style.opacity=alpha/100。
實(shí)現(xiàn)滾動(dòng)條事件:
代碼:

<!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多物體運(yùn)動(dòng)的各種問(wèn)題

問(wèn)題一:

希望實(shí)現(xiàn)的功能:三個(gè)平行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>

注意事項(xiàng):

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

問(wèn)題二:

希望實(shí)現(xiàn)的功能:多圖片的淡入淡出。
代碼:

<!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>

希望實(shí)現(xiàn)的功能:多物體不同方向的伸縮功能。

代碼:

<!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>

注意事項(xiàng):

1.offsetwidth所獲得的并不只是物體的純寬度,還有物體的變寬以及外邊距。那么在obj.style.width=obj.offsetwidth-1+"px";這句中,本意是希望圖片縮小以1px的速度勻速縮小,但是如果將邊框的寬度設(shè)置為1px而非0px,那么offsetwidth的值其實(shí)是obj的width(注意:不是style.width即不是行間的width)+2,上面這句變成了obj.style.width=obj的width+2-1+“px”;圖像反而增大了。解決的辦法就是不用offsetwidth,而用obj的width。width通過(guò)getStyle方法獲得。
2.getStyle方法得到的是string。需要用parseint強(qiáng)制轉(zhuǎn)換成數(shù)字類型。

完整的運(yùn)動(dòng)框架:

<!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>

希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 腾冲县| 视频| 长宁区| 登封市| 沽源县| 秦安县| 乃东县| 措勤县| 白玉县| 沾化县| 天津市| 仁寿县| 岢岚县| 保靖县| 都江堰市| 河曲县| 台前县| 兴化市| 四会市| 五华县| 汨罗市| 忻城县| 宾川县| 炉霍县| 宜兰县| 奉贤区| 北京市| 莎车县| 璧山县| 滨海县| 宽甸| 青河县| 沁阳市| 大关县| 枣强县| 旌德县| 神农架林区| 余干县| 漳平市| 龙州县| 石首市|