国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript 運動中Offset的bug解決方案

2024-05-06 16:12:49
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Javascript 運動中Offset的bug解決方案,需要的朋友可以參考下
 
 

我們先來看看這個bug 是怎么產生的。

 

復制代碼代碼如下:

<style type="text/css">
            #div1 {
                width: 200px;
                height: 200px;
                background: red;
                
            }
        </style>

 

 

復制代碼代碼如下:

<body>
        <div id="div1">
            
        </div>
    </body>

 

以下是用來測試的Javascript代碼 ,目的是 讓div慢慢變窄。

 

復制代碼代碼如下:

<script type="text/javascript">
            setInterval(function(){
                var oDiv=document.getElementById("div1");
                
                oDiv.style.width=oDiv.offsetWidth-1+'px';
                
            },30);
        </script>

 

Javascript 代碼 很簡單,運行一下 沒有任何問題,如愿的div在慢慢變小。

那這個offset 的bug又是怎么來的呢?

下面我們動動樣式 就會神奇的事情發生了。。。

我們給div1 加個樣式 border: 1px solid #CCCCFF;

 

復制代碼代碼如下:

<style type="text/css">
            #div1 {
                width: 200px;
                height: 200px;
                background: red;
                border: 1px solid #CCCCFF;
            }
        </style>

 

此時在運行代碼 ,發現div 居然往右邊慢慢增大。。。image BUG 驚現。。。。 明明是減1 為什么會出現這種情況。

讓我們想想offset 有什么特點:

舉例: div width : 200px  border 1px  。 實際上他得到的offsetWidth 是202px 。

那么,我們說回來,運動剛開始的時候,實際上div 的寬度是200px  那么offsetWidth 是202

這個時候 oDiv.style.width=oDiv.offsetWidth-1+'px'; 這句話就是等于 oDiv.style.width=202-1=201px; 然后在賦值給width

當再次執行這句話的時候 div的寬度是 201px; 這樣的話,每次都會增加1px,反而慢慢變大了。 這就是offset 的bug 。

怎么解決這個問題呢?

其實不用這個offsetWidth 就可以了 。 我們用 width ?。?寫個函數直接獲取 css樣式中width 即可

獲取不在行間中的樣式 :

 

復制代碼代碼如下:

function getStyle(obj, name) {
                if (obj.currentStyle) {
                    return obj.currentStyle[name];
                } else {
                    return getComputedStyle(obj, null)[name];
                }
            }

 

那么我們在修改下原來的代碼:

 

復制代碼代碼如下:

<script type="text/javascript">
            setInterval(function(){
                var oDiv=document.getElementById("div1");
                oDiv.style.width=parseInt(getStyle(oDiv,'width'))-1+'px';
            },30);
            function getStyle(obj, name) {
                if (obj.currentStyle) {
                    return obj.currentStyle[name];
                } else {
                    return getComputedStyle(obj, null)[name];
                }
            }
        </script>

 
這樣程序運行就不會有任何問題了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 炉霍县| 岑巩县| 酉阳| 澄城县| 昭通市| 绵阳市| 乐平市| 嘉定区| 平阴县| 怀柔区| 射洪县| 儋州市| 台山市| 开平市| 遂宁市| 儋州市| 旬阳县| 余庆县| 沾益县| 英超| 淳化县| 师宗县| 阜新| 西乌珠穆沁旗| 北碚区| 大英县| 江津市| 上栗县| 正蓝旗| 会昌县| 绥阳县| 仙居县| 汉沽区| 赤壁市| 宜春市| 峨边| 五莲县| 那曲县| 天台县| 兴安盟| 昂仁县|