Heim > Web-Frontend > js-Tutorial > Klassische JavaScript-Zusammenfassung verschiedener Probleme im Zusammenhang mit Sports_Javascript-Kenntnissen

Klassische JavaScript-Zusammenfassung verschiedener Probleme im Zusammenhang mit Sports_Javascript-Kenntnissen

WBOY
Freigeben: 2016-05-16 16:02:00
Original
997 Leute haben es durchsucht

Die Beispiele in diesem Artikel fassen verschiedene Probleme im Zusammenhang mit Sport in JavaScript zusammen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1. Verschiedene Probleme in der JS-Bewegung

Frage 1:

Fehlercode:

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) 
 } 
}
Nach dem Login kopieren

Funktionen, die Sie implementieren möchten:

Öffnen Sie den Timer, lassen Sie div1 auf 300 Pixel gehen, stoppen Sie dann div1 und schalten Sie den Timer aus.

Fehler:

Die if-Anweisung ist falsch. Der Code setzt zunächst einen Null-Timer und schaltet dann den Timer aus, wenn der linke Rand von div1 300 Pixel beträgt. Ansonsten bleiben Sie in Bewegung. Aber if ist keine Schleifenanweisung. Nachdem die if-Anweisung einmal ausgeführt wurde, wird sie nicht mehr ausgeführt. Der Timer wird also nie ausgeschaltet.

Korrekter Code:

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) 
}
Nach dem Login kopieren

Frage 2:
Fehlercode:

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) 
}
Nach dem Login kopieren

Funktionen, die Sie implementieren möchten:

Wenn Sie kontinuierlich auf die Startschaltfläche klicken, wird div1 beschleunigt. Dies liegt daran, dass jedes Mal, wenn Sie auf die Schaltfläche klicken, ein Timer gestartet wird, der kumulativ beschleunigt, unabhängig davon, ob ein Timer vorhanden ist oder nicht muss zuerst den einen Timer ausschalten. Aber nachdem die Methode „clearInterval“ zum Schließen des Timers hinzugefügt wurde, wird er immer noch schneller.
Fehler:
Das Einfügen der Timer-Variablen in die startMove-Methode bedeutet, dass jedes Mal, wenn auf die Schaltfläche geklickt wird, die startMove-Methode ausgeführt und ein Abschluss generiert wird. Daher wird der Timer in jedem Abschluss nicht gemeinsam genutzt Es entspricht immer noch der Generierung eines Abschluss-Timers für die Anzahl der Klicks.

Korrekter Code:

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) 
}
Nach dem Login kopieren

Realisieren Sie die Ein- und Ausstiegsfunktion der Freigabeleiste:
Code:

<!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>
Nach dem Login kopieren

Funktion zum Ein- und Ausblenden von Bildern erreichen:
Code:

<!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> 
Nach dem Login kopieren

Hinweis:

1. Weil JavaScript keine Attribute wie den linken Rand (offsetLeft) für Transparenz hat. Verwenden Sie stattdessen eine Alpha-Variable.
2. Beim Festlegen der Interline-Transparenz im JavaScript-Code müssen Probleme mit der Browserkompatibilität berücksichtigt werden. Die Einstellungsmethode für den IE-Browser lautet oDiv1.style.filter="aplha(opacity:" aplha ")"; Chrome und Firefox sind oDiv1.style.opacity=alpha/100.
Implementieren Sie Scrollbar-Ereignisse:
Code:

<!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&#63;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>
Nach dem Login kopieren
2. Verschiedene Probleme mit der JS-Mehrobjektbewegung

Frage 1:

Die Funktion, die Sie erreichen möchten: kostenlose parallele Skalierung von drei parallelen Divs.

Code:

<!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&#63;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>
Nach dem Login kopieren
Hinweis:

Wenn Sie nur einen Timer (einen globalen Timer) für die Bewegung mehrerer Objekte festlegen, teilen sich drei Divs einen globalen Timer. Wenn dann ein Div die Verkleinerungsaktion nicht abschließt, startet das andere Div den Timer, um die Streckung durchzuführen Da der Timer global ist, wird der Timer des vorherigen Divs überschrieben oder abgebrochen, sodass der vorherige Timer die Aktion letzte Nacht nicht vollständig reduzieren kann. Die Lösung besteht darin, für jedes Div einen Attribut-Timer festzulegen.

Frage 2:

Funktionen, die Sie erreichen möchten: Ein- und Ausblenden mehrerer Bilder.

Code:

<!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&#63;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>
Nach dem Login kopieren
Die Funktion, die Sie realisieren möchten: die Teleskopfunktion mehrerer Objekte in verschiedene Richtungen.

Code:

<!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&#63;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>
Nach dem Login kopieren
Hinweis:

1. Was offsetwidth erhält, ist nicht nur die reine Breite des Objekts, sondern auch die Breite und der Rand des Objekts. Dann besteht im Satz obj.style.width=obj.offsetwidth-1 "px"; die ursprüngliche Absicht darin, das Bild mit einer gleichmäßigen Geschwindigkeit von 1 Pixel zu verkleinern. Wenn die Breite des Rahmens jedoch auf 1 Pixel statt auf 0 Pixel eingestellt ist, dann ist der Wert von offsetwidth Tatsächlich ist es die Breite von obj (Hinweis: Es ist nicht style.width, das heißt, es ist nicht die Breite zwischen den Zeilen) 2. Der obige Satz wird zu obj.style.width=objs Breite 2 -1 „px“; stattdessen wird das Bild vergrößert. Die Lösung besteht nicht darin, offsetwidth zu verwenden, sondern die Breite von obj. Die Breite wird über die getStyle-Methode ermittelt.

2. Die getStyle-Methode ruft einen String ab. Sie müssen Parseint verwenden, um es in einen numerischen Typ umzuwandeln.

Komplettes Bewegungsgerüst:

<!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&#63;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>
Nach dem Login kopieren
Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage