ホームページ ウェブフロントエンド jsチュートリアル JavaScript の offsetWidth に関するバグの問題と解決策

JavaScript の offsetWidth に関するバグの問題と解決策

May 21, 2017 pm 01:18 PM

この記事では、主に JavaScript の offsetWidth のバグと解決策を詳しく紹介します。興味のある方は、object

の Visible width の

offsetWidth 表現を参照してください。 例:

#p1 {
 width: 100px;
 height: 200px;
 background: red;
}
ログイン後にコピー

結果: 100

#p1 {
 width: 100px;
 height: 200px;
 background: red;
 border: 2px solid black;
}
ログイン後にコピー

結果: 104 (100 + 2 + 2)

#p1 {
 width: 100px;
 height: 200px;
 background: red;
 border: 2px solid black;
 padding: 20px;
}
ログイン後にコピー

結果: 144 (100 + 2 + 2 + 20 + 20)

#p1 {
 width: 100px;
 height: 200px;
 background: red;
 margin: 4px;
}
ログイン後にコピー

結果: 100

**

つまり、

offsetWidth = width + padding + border、marginとは何の関係もありません。

**

例を見てみましょう:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>offsetWidth</title>
 <style type="text/css">
  #p1 {
   width: 500px;
   height: 200px;
   background: red;
  }
 </style>
</head>
<body>
 <p id="p1"></p>
 <script type="text/javascript">
  var op = document.getElementById(&#39;p1&#39;);
  setInterval(function() {
   op.style.width = op.offsetWidth - 1 + &#39;px&#39;;
  }, 50);
 </script>
</body>
</html>
ログイン後にコピー

現象: 赤い p が徐々に狭くなり、消えるまで問題ありません。

p に境界線を追加したらどうなるでしょうか?


<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>offsetWidth</title>
 <style type="text/css">
  #p1 {
   width: 500px;
   height: 200px;
   background: red;
   border: 1px solid black;
  }
 </style>
</head>
<body>
 <p id="p1"></p>
 <script type="text/javascript">
  var op = document.getElementById(&#39;p1&#39;);
  setInterval(function() {
   op.style.width = op.offsetWidth - 1 + &#39;px&#39;;
  }, 50);
 </script>
</body>
</html>
ログイン後にコピー

現象: 赤いPが狭くならないだけでなく、どんどん広くなっていきます…


*

理由も非常に単純です。これは境界線の直接の原因であり、 offsetWidth は境界線を考慮するため、

タイマー が最初にポーリングすると、width: 102 - 1 == 101、その後、offsetWidth はすぐに 103 になり、2 回目は width: 103 - 1 == 102 になります。 offsetWidth はすぐに 104 になります; 3 回目の直後、width: 104 - 1 == 103、offsetWidth は 104...

If op.style.width = op.offsetWidth - 1 + 'px' は - に置き換えられます。 2 の場合、offsetWidth は 102 なので、赤い p は移動せず、広くも狭くもなりません。 2 を引くことは、100 が元の幅に等しいことを意味し、次回

がループするとき、offsetWidth は 100 プラスになります。境界線の 2 を引いて 2 または 100 に移動するので、移動しないでください...* 解決策も非常に簡単です。気分を害する余裕がない場合は、隠す余裕はありません。 offsetWidth は必要ありません。


要素の行間スタイルを取得するには、element.style.width を直接使用できることは誰もが知っていますが、これは要素の行間スタイルにのみ適用され、CSS で記述されている場合はそれができません。


しかし、次の方法もあります:

    IE では、 element.
  • current

    Style.width / element.currentStyle.['width'];

  • 非 IE では、 getComputedStyle(element, false)['width'] を使用してください
  • <!DOCTYPE html>
    <html>
    <head>
     <meta charset="utf-8">
     <title>offsetWidth</title>
     <style type="text/css">
      #p1 {
       width: 500px;
       height: 200px;
       background: red;
       border: 1px solid black;
      }
     </style>
    </head>
    <body>
     <p id="p1"></p>
     <script type="text/javascript">
    
      var op = document.getElementById(&#39;p1&#39;);
      function getStyle(obj, attr) {
       if (obj.currentStyle) {//IE
        return obj.currentStyle[attr];
       } else {
        return getComputedStyle(obj, false)[attr];
       }
      }
      alert(getStyle(op, &#39;width&#39;));//直接弹出 “500px”
     </script>
    </body>
    </html>
    ログイン後にコピー
  • 上記のパッケージを使用すると、offsetWidth による問題を解決できます
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>offsetWidth</title>
 <style type="text/css">
  #p1 {
   width: 500px;
   height: 200px;
   background: red;
   border: 1px solid black;
  }
 </style>
</head>
<body>
 <p id="p1"></p>
 <script type="text/javascript">
  var op = document.getElementById(&#39;p1&#39;);
  function getStyle(obj, attr) {
   if (obj.currentStyle) {//IE
    return obj.currentStyle[attr];
   } else {
    return getComputedStyle(obj, false)[attr];
   }
  }
  setInterval(function() {
   //parseInt是因为getStyle()返回的是‘px&#39;带单位,要整数化
   op.style.width = parseInt(getStyle(op, &#39;width&#39;)) - 1 + &#39;px&#39;;
  }, 30);
 </script>
</body>
</html>
ログイン後にコピー

以上がJavaScript の offsetWidth に関するバグの問題と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

ゲームのバグってどういう意味ですか? ゲームのバグってどういう意味ですか? Feb 18, 2024 am 11:30 AM

ゲームのバグとは何ですか? ゲームのプレイ中に、キャラクターが動かなくなったり、タスクが続行できなくなったり、画面がちらついたりするなど、予期せぬエラーや問題が発生することがよくあります。このような異常現象をゲームバグ、つまりゲーム上の不具合やエラーと呼びます。この記事では、ゲームのバグが何を意味し、それがプレイヤーや開発者に与える影響について探っていきます。ゲームのバグとは、ゲームの開発または運用中に発生し、ゲームが正常に実行できなくなったり、予期しない動作を引き起こしたりするエラーを指します。これらのエラーの原因として考えられるのは、

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

Apple iOS18 のバグの概要 Apple iOS18 のバグの概要 Jun 14, 2024 pm 01:48 PM

Apple の WWDC カンファレンス 2024 が成功裡に終了する中、macos15 が発表されただけでなく、Apple の新しい iOS18 システムのアップデートが最も注目を集めました。Apple の iOS18 の最初のバージョンとして、多くの新機能がありますが、人々は必然的にそれがどうか疑問に思います。 Apple iOS18 にアップグレードする必要がありますが、Apple iOS18 の最新リリースにはどのようなバグがありますか?実際の使用評価の後、以下に Apple iOS 18 のバグの概要を示しますので、見てみましょう。現在、多くのiPhoneユーザーがiOS18へのアップグレードを急いでいますが、さまざまなシステムバグが人々を不快にさせています。一部のブロガーは、「バグが非常に多い」ため、iOS18にアップグレードする場合は注意する必要があると述べています。ブロガーは、あなたのiPhoneが

See all articles