Voyons d’abord comment ce bug se produit. Copier le code Le code est le suivant : <br> #div1 {<br> largeur : 200 px ;<br> hauteur : 200 px ;<br> fond : rouge ;<br> }<br> <br><br> </div> <p></p> <div class="codetitle"><span>Copier le code<a style="CURSOR: pointer" data="90578" class="copybut" id="copybut90578" onclick="doCopy('code90578')"><u></u> Le code est le suivant :</a></span></div> <corps><div class="codebody" id="code90578"> <div id="div1"><br> </corps><br> <br><br> <br>Ce qui suit est le code Javascript utilisé pour les tests, le but est de réduire lentement le div. <br> </div> <p></p> <p>Copier le code</p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="68552" class="copybut" id="copybut68552" onclick="doCopy('code68552')"> Le code est le suivant :<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>Le code Javascript est très simple. Si vous l'exécutez, il n'y aura aucun problème. Le div souhaité deviendra progressivement plus petit. <br> <br>Alors d'où vient ce bug de décalage ? <br> <br>Maintenant, changeons de style et quelque chose de magique se produira. . . </div> Nous ajoutons une bordure de style à div1 : 1px solid #CCCCFF ;<p> </p> <p></p> <p></p>Copier le code<p></p> <p> Le code est le suivant :</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> largeur : 200 px ;</a> hauteur : 200 px ;</span> fond : rouge ;</div> bordure : 1 px solide #CCCCFF ;<div class="codebody" id="code8073"> }<br> <br> <p>Quand j'exécute le code à ce moment-là, je constate que le div augmente lentement vers la droite. . . image BUG est soudainement apparu. . . . Il s’agit évidemment de moins 1. Pourquoi cela se produit-il ? </p> <p>Réfléchissons aux caractéristiques de l'offset : </p> <p>Exemple : largeur div : 200 px, bordure 1 px. En fait, le offsetWidth qu'il a obtenu est de 202 px. </p> <p>Alors parlons-en. Lorsque le mouvement vient de commencer, la largeur du div était en fait de 200px, donc le offsetWidth était de 202</p> <p>À ce moment-là, oDiv.style.width=oDiv.offsetWidth-1 'px' ; cette phrase est égale à oDiv.style.width=202-1=201px, puis attribuez-la à width</p> ; <p>Lorsque cette phrase est à nouveau exécutée, la largeur du div est de 201px ; dans ce cas, elle augmentera de 1px à chaque fois, mais elle deviendra progressivement plus grande. C'est le bug de décalage. </p> <p>Comment résoudre ce problème ? </p> <p>En fait, vous n’avez pas besoin de ce offsetWidth. Nous utilisons la largeur ! ! Ecrire une fonction pour obtenir directement la largeur dans le style CSS </p> <p>Obtenez des styles qui ne sont pas entre les lignes : </p> <p></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="89510" class="copybut" id="copybut89510" onclick="doCopy('code89510')"><u>Copier le code</u></a></span> Le code est le suivant :</div> <div class="codebody" id="code89510"> <br> fonction getStyle(obj, nom) {<br> Si (obj.currentStyle) {<br> return obj.currentStyle[name];<br> } autre {<br> return getComputedStyle(obj, null)[name];<br> }<br> }<br> </div> <p>Alors modifions le code original : </p> <p></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="71756" class="copybut" id="copybut71756" onclick="doCopy('code71756')"><u>Copier le code</u></a></span> Le code est le suivant :</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> Si (obj.currentStyle) {<br> return obj.currentStyle[name];<br> } autre {<br> return getComputedStyle(obj, null)[name];<br> }<br> }<br> <br> </div> <br> De cette façon, le programme fonctionnera sans aucun problème. <br> </div>