JavaScript で += 演算子を不適切に使用すると増分エラーが発生する
P粉178894235
2023-09-02 20:32:58
<p>テキストをフェードインしようとしている div があります。 </p>
<p>
<pre class="brush:js;toolbar:false;">function fadeIn(divNum) {
ID = null にします。
fadeDiv = document.getElementById("jsTest");
fadeDiv.innerHTML = "";
console.log(fadeDiv.style.opacity);
if (divNum == 1) {
fadeDiv.innerHTML = "テキスト";
} else if (divNum == 2 ) {
fadeDiv.innerHTML = "いくつかの異なるテキスト";
} else if (divNum == 3) {
fadeDiv.innerHTML = "まだ異なるテキスト";
} それ以外 {
fadeDiv.innerHTML = "おっと! こんなことは起こらないはずです";
}
クリアインターバル(id);
id = setInterval(moveIt,100);
関数 moveIt() {
if (fadeDiv.style.opacity == 1) {
クリアインターバル(id);
} それ以外 {
fadeDiv.style.opacity = 0.1;
console.log(fadeDiv.style.opacity);
}
}
}</pre>
<pre class="brush:html;toolbar:false;"><div style="opacity: 0;" id="jsTest"></div>
<button class="boxButtonsb" onmouseover="fadeIn(1)">JavaScript テスト</button></pre>
</p>
<p>ホバーすると、不透明度は <code>.1</code> だけ減少し、そこで永遠にループしているように見えます。コンソール ログには、無限の <code>0.1</code> エントリが表示されます。 </p>
<p> ただし、これを反転すると、初期の不透明度が 1 になり、div から始まるテキストがあり、実際には <code>fadeDiv.style.opacity を使用して <code>fadeIn</code> を設定します。 == 0</code> <code>clearInterfal(id)</code> の if ステートメントとしてチェックされ、<code>fadeDiv.style.opacity< <code>-= 0.1</code> ;/ によってデクリメントされました。コード>を選択すると、正常に動作します。 </p>
<p>なぜデクリメントは正しくてインクリメントは正しくないのか全く分かりません。 </p>
CSS プロパティは常に数値ではなく文字列です。コードは
'0.1' 0.1
を実行し、結果は'0.10.1'
になります。これは有効な数値ではないため、0.1
に切り詰められる可能性があります。 。これを変更する 1 つの方法は、結果を数値として解析することです。
リーリーHTMLELEment::style
文字列値が含まれており、浮動小数点数に変換する必要があります: