• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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中,你就獲取不到了.

    但也是有辦法的:

  • IE中用element.currentStyle.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('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
    主站蜘蛛池模板: 久久久久亚洲精品天堂| 亚洲精品人成在线观看| 亚洲第一精品在线视频| 无码人妻精品一区二区三区99仓本 | 野狼第一精品社区| 国产精品成人精品久久久| 99久久精品午夜一区二区| 亚洲av永久无码精品网站| 久久久精品视频免费观看| 91嫩草亚洲精品| 久久久精品免费国产四虎| 91麻豆精品视频在线观看| 精品久久久久中文字幕日本| 尤物国精品午夜福利视频| 久久久久成人精品无码| 国产在线精品观看免费观看| 91精品国产品国语在线不卡 | 青青青青久久精品国产h久久精品五福影院1421 | 精品久久久久久国产三级| 午夜精品视频在线观看| 国产精品电影网| 国产成人精品免费视频大| 精品国偷自产在线| 亚洲国产精品无码久久一区二区| 亚洲AV永久无码精品一区二区| 国产线视频精品免费观看视频| 国产精品成人国产乱一区| 国产精品无码久久综合网| 国产精品国产三级国产| 国产精品自在线拍国产电影| 国产精品视频全国免费观看| 国产精品狼人久久久久影院| 国产精品午夜久久| 精品日韩在线视频一区二区三区| 惠民福利中文字幕人妻无码乱精品 | 久久久久九国产精品| 久久精品国产亚洲Aⅴ蜜臀色欲| 欧美日韩精品| 中文字幕亚洲精品无码| 亚洲精品V欧洲精品V日韩精品 | 亚洲国产另类久久久精品黑人|