Werfen wir zunächst einen Blick darauf, wie dieser Fehler auftritt. Code kopieren Der Code lautet wie folgt: <br> #div1 {<br> Breite: 200 Pixel;<br> Höhe : 200px;<br> Hintergrund: rot;<br> }<br> <br><br> </div> <p></p> <div class="codetitle"><span>Code kopieren<a style="CURSOR: pointer" data="90578" class="copybut" id="copybut90578" onclick="doCopy('code90578')"><u></u> Der Code lautet wie folgt:</a></span></div> <body><div class="codebody" id="code90578"> <div id="div1"><br> </body><br> <br><br> <br>Das Folgende ist der zum Testen verwendete Javascript-Code. Der Zweck besteht darin, das Div langsam einzugrenzen. <br> </div> <p></p> <p>Code kopieren</p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="68552" class="copybut" id="copybut68552" onclick="doCopy('code68552')"> Der Code lautet wie folgt:<u></u></a> <script type="text/javascript"></span> setInterval(function(){</div> var oDiv=document.getElementById("div1");<div class="codebody" id="code68552"> oDiv.style.width=oDiv.offsetWidth-1 'px';<br> },30);<br> <br><br> <br>Der Javascript-Code ist sehr einfach. Wenn Sie ihn ausführen, wird das gewünschte Div nach und nach kleiner. <br> <br>Woher kommt dann dieser Offset-Fehler? <br> <br>Jetzt ändern wir den Stil und etwas Magisches wird passieren. . . </div> Wir fügen div1 einen Stilrahmen hinzu: 1px solid #CCCCFF;<p> </p> <p></p> <p></p>Code kopieren<p></p> <p> Der Code lautet wie folgt:</p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="8073" class="copybut" id="copybut8073" onclick="doCopy('code8073')"> <style type="text/css"><u> #div1 {</u> Breite: 200 Pixel;</a> Höhe : 200px;</span> Hintergrund: rot;</div> Rand: 1 Pixel durchgehend #CCCCFF;<div class="codebody" id="code8073"> }<br> <br> <p>Wenn ich den Code zu diesem Zeitpunkt ausführe, stelle ich fest, dass das Div langsam nach rechts zunimmt. . . Plötzlich tauchte ein Bildfehler auf. . . . Es ist offensichtlich minus 1. Warum passiert das? </p> <p>Lassen Sie uns über die Eigenschaften des Offsets nachdenken: </p> <p>Beispiel: Div-Breite: 200 Pixel, Rand 1 Pixel. Tatsächlich beträgt die OffsetWidth, die er erhalten hat, 202px. </p> <p>Als die Bewegung gerade begann, betrug die Breite des Div tatsächlich 200 Pixel, also betrug die OffsetWidth 202</p> <p>Zu diesem Zeitpunkt ist oDiv.style.width=oDiv.offsetWidth-1 'px'; dieser Satz ist gleich oDiv.style.width=202-1=201px und weist ihn dann der Breite zu</p> <p>Wenn dieser Satz erneut ausgeführt wird, beträgt die Breite des Div in diesem Fall 201 Pixel. Sie erhöht sich jedes Mal um 1 Pixel, wird jedoch allmählich größer. Das ist der Offset-Bug. </p> <p>Wie kann dieses Problem gelöst werden? </p> <p>Tatsächlich benötigen Sie diese OffsetWidth nicht. Wir verwenden Breite! ! Schreiben Sie eine Funktion, um die Breite direkt im CSS-Stil </p> zu erhalten <p>Erhalten Sie Stile, die nicht zwischen Zeilen liegen: </p> <p></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="89510" class="copybut" id="copybut89510" onclick="doCopy('code89510')"><u>Code kopieren</u></a></span> Der Code lautet wie folgt:</div> <div class="codebody" id="code89510"> <br> Funktion getStyle(obj, name) {<br> If (obj.currentStyle) {<br> return obj.currentStyle[name];<br> } sonst {<br> return getComputedStyle(obj, null)[name];<br> }<br> }<br> </div> <p>Dann ändern wir den Originalcode: </p> <p></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="71756" class="copybut" id="copybut71756" onclick="doCopy('code71756')"><u>Code kopieren</u></a></span> Der Code lautet wie folgt:</div> <div class="codebody" id="code71756"> <br> <script type="text/javascript"><br> setInterval(function(){<br> var oDiv=document.getElementById("div1");<br> oDiv.style.width=parseInt(getStyle(oDiv,'width'))-1 'px';<br> },30);<br> function getStyle(obj, name) {<br> If (obj.currentStyle) {<br> return obj.currentStyle[name];<br> } sonst {<br> return getComputedStyle(obj, null)[name];<br> }<br> }<br> <br> </div> <br> Auf diese Weise läuft das Programm ohne Probleme. <br> </div>