<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript中關于offsetWidth的bug問題以及解決方法

        來源:懂視網 責編:小OO 時間:2020-11-27 20:22:38
        文檔

        JavaScript中關于offsetWidth的bug問題以及解決方法

        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)。
        推薦度:
        導讀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)。
        這篇文章主要為大家詳細介紹了JavaScript中offsetWidth的bug及解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

        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('p1');
         setInterval(function() {
         op.style.width = op.offsetWidth - 1 + 'px';
         }, 50);
         </script>
        </body>
        </html>

        現象:紅色p逐漸變窄,直到消失,沒問題!

        如果給p加一個border,呢?

        <!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('p1');
         setInterval(function() {
         op.style.width = op.offsetWidth - 1 + 'px';
         }, 50);
         </script>
        </body>
        </html>

        現象:紅色p不僅沒有變窄,反而越來越寬……

        *

        原因也很簡單:就是border的直接原因,因為offsetWidth是把border算進去的,定時器輪詢的時候,第一次,width : 102 - 1 == 101 ,那么offsetWidth立馬就變為103;第二次,width: 103 - 1 == 102, 那么offsetWidth立馬就變為104;緊接著第三次,width: 104 - 1 == 103, offsetWidth就為104了……

        倘若把 op.style.width = op.offsetWidth - 1 + ‘px'; 換成 -2,那么紅色p就不動了,不會變寬也不會變窄,因為offsetWidth為102,減去2就是100和原本的width相等,下一次循環,offsetWidth就等于100加上border的2,再減去2還是100,所以不動……*

        解決方案也很簡單,惹不起還躲不起?不用offsetWidth了!

        我們都知道,獲取元素的行間樣式直接用element.style.width即可,但是這只針對元素的行間樣式,如果寫在css中,你就獲取不到了.

        但也是有辦法的:

      1. IE中用element.currentStyle.width / element.currentStyle.[‘width'];

      2. 非IE中用getComputedStyle(element, false)[‘width']

      3. <!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('p1');
         function getStyle(obj, attr) {
         if (obj.currentStyle) {//IE
         return obj.currentStyle[attr];
         } else {
         return getComputedStyle(obj, false)[attr];
         }
         }
         alert(getStyle(op, 'width'));//直接彈出 “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('p1');
         function getStyle(obj, attr) {
         if (obj.currentStyle) {//IE
         return obj.currentStyle[attr];
         } else {
         return getComputedStyle(obj, false)[attr];
         }
         }
         setInterval(function() {
         //parseInt是因為getStyle()返回的是‘px'帶單位,要整數化
         op.style.width = parseInt(getStyle(op, 'width')) - 1 + 'px';
         }, 30);
         </script>
        </body>
        </html>

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript中關于offsetWidth的bug問題以及解決方法

        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)。
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久精品国产免费观看 | 亚洲AV无码一区二区乱子伦 | a级毛片免费网站| 亚洲国产精品自产在线播放| 亚洲av无码片vr一区二区三区| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 国产亚洲精品bv在线观看| 免费做爰猛烈吃奶摸视频在线观看 | 亚洲jizzjizz在线播放久| 久久精品免费全国观看国产| 亚洲国产中文在线二区三区免| 在线观看www日本免费网站| 亚洲成人黄色在线观看| 免费无码精品黄AV电影| 国产精品亚洲专区无码牛牛| 亚洲成片观看四虎永久| 日韩电影免费在线观看网站| 亚洲av网址在线观看| 18禁免费无码无遮挡不卡网站| 亚洲欧美日韩一区二区三区在线 | 亚洲人成网站在线观看播放| 久久青草免费91线频观看站街| 亚洲另类精品xxxx人妖| 国产裸模视频免费区无码| 有码人妻在线免费看片| 亚洲成AV人片一区二区密柚| 99国产精品永久免费视频| 亚洲熟妇AV一区二区三区浪潮| 亚洲国产av一区二区三区| 日韩免费观看一区| 亚洲中文字幕乱码一区| 亚洲男人第一无码aⅴ网站| 最近在线2018视频免费观看| 亚洲免费视频网址| 亚洲成av人片在线观看天堂无码| 免费福利在线视频| 亚洲熟妇AV乱码在线观看| 亚洲国产精品高清久久久| 最近中文字幕mv免费高清视频7| 国产va免费精品| 亚洲人成毛片线播放|