JavascriptスポーツにおけるOffsetのbugソリューション
3105 ワード
まずこのバグはどのように発生したのか見てみます.
このオフセットのバグはどうやって来ましたか?
次に私たちがスタイルを動かすと不思議なことが起こります.
私たちはdiv 1にスタイルborderを追加します.
オフセットの特徴を考えてみましょう.
例:div width:200 px border 1 px . 彼が実際に得たoffset Widthは202 pxです.
では、運動が始まったばかりの頃は、実際にdivの幅は200 pxだったと言います. では、offset Widthは202です.
この時oDiv.style.width=oDiv.offset Width-1+'px'この言葉はoDiv.style.width=202-1=201 pxに等しい.そしてwidthに値を付けます.
この言葉を再実行するとdivの幅は201 pxです.そうすると毎回1 pxが増えて、だんだん大きくなります.これはoffsetのbugです.
この問題はどう解決しますか?
実はこのoffset Widthを使わなくてもいいです.私たちはwidthを使います.関数を書いて直接cssスタイルのwidthを取得すればいいです.
行間にないスタイルを取得:
このようにプログラムを実行すれば、何の問題もありません.
以下はテスト用のJavascriptコードです.目的はdivを徐々に狭くすることです.
<br> setInterval(function(){
<br> var oDiv=document.getElementById("div1");
<br>
<br> oDiv.style.width=oDiv.offsetWidth-1+'px';
<br>
<br> },30);
<br>
Javascriptコードはとても簡単です.運行しても大丈夫です.思い通りのdivはだんだん小さくなります.このオフセットのバグはどうやって来ましたか?
次に私たちがスタイルを動かすと不思議なことが起こります.
私たちはdiv 1にスタイルborderを追加します.
この時コードを実行していますが、divは右に向かって徐々に増大しています.image BUG惊现.......マイナス1なのに、なぜこんなことが起きたのですか?オフセットの特徴を考えてみましょう.
例:div width:200 px border 1 px . 彼が実際に得たoffset Widthは202 pxです.
では、運動が始まったばかりの頃は、実際にdivの幅は200 pxだったと言います. では、offset Widthは202です.
この時oDiv.style.width=oDiv.offset Width-1+'px'この言葉はoDiv.style.width=202-1=201 pxに等しい.そしてwidthに値を付けます.
この言葉を再実行するとdivの幅は201 pxです.そうすると毎回1 pxが増えて、だんだん大きくなります.これはoffsetのbugです.
この問題はどう解決しますか?
実はこのoffset Widthを使わなくてもいいです.私たちはwidthを使います.関数を書いて直接cssスタイルのwidthを取得すればいいです.
行間にないスタイルを取得:
function getStyle(obj, name) {
if (obj.currentStyle) {
return obj.currentStyle[name];
} else {
return getComputedStyle(obj, null)[name];
}
}
じゃ、私達はもとのコードを修正します.
<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> } else {
<br> return getComputedStyle(obj, null)[name];
<br> }
<br> }
<br>
このようにプログラムを実行すれば、何の問題もありません.