<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
        主站蜘蛛池模板: 亚洲国产a∨无码中文777| 日韩免费观看视频| 国产精品亚洲mnbav网站 | 九九全国免费视频| 麻豆成人精品国产免费| 国产人成亚洲第一网站在线播放| 久久精品国产亚洲av高清漫画| 精品无码一区二区三区亚洲桃色 | 免费人成在线观看69式小视频| 三年片在线观看免费观看高清电影 | 插鸡网站在线播放免费观看| 免费国产怡红院在线观看| 亚洲精品无码高潮喷水A片软| 九九视频高清视频免费观看| 亚洲无码视频在线| 亚洲成a人片在线观看天堂无码| 麻豆精品成人免费国产片| 亚洲日韩精品无码专区网址| 国产偷伦视频免费观看| 亚洲av无码一区二区三区不卡 | 在线观看www日本免费网站| 亚洲综合成人网在线观看| 永久在线观看www免费视频| 亚洲一区二区三区精品视频| 99久久免费国产精品特黄| 亚洲人成片在线观看| 成人最新午夜免费视频| 国产成人亚洲午夜电影| 国产亚洲精品无码成人| 91免费在线播放| 丰满亚洲大尺度无码无码专线| 精品一区二区三区免费毛片爱| 国产伦精品一区二区三区免费下载 | 久久国产乱子免费精品| 亚洲视频.com| 四虎成人免费网址在线| 免费无毒a网站在线观看| 亚洲av无码精品网站| 成年美女黄网站18禁免费| 成年大片免费视频播放一级| 亚洲视频2020|