国产探花免费观看_亚洲丰满少妇自慰呻吟_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>

 
這樣程序運行就不會有任何問題了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上犹县| 松原市| 株洲市| 河南省| 大渡口区| 股票| 昌宁县| 周宁县| 宿州市| 高安市| 循化| 东乡族自治县| 墨玉县| 马尔康县| 中卫市| 名山县| 新疆| 镶黄旗| 营山县| 迁安市| 钦州市| 大同县| 茌平县| 深水埗区| 绍兴县| 光山县| 永胜县| 区。| 成安县| 宜君县| 邓州市| 吴江市| 永春县| 右玉县| 云南省| 盘锦市| 牡丹江市| 东至县| 黄龙县| 黄龙县| 德钦县|