午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    Javascript 運(yùn)動(dòng)中Offset的bug解決方案
    來(lái)源:易賢網(wǎng) 閱讀:769 次 日期:2014-12-26 14:03:08
    溫馨提示:易賢網(wǎng)小編為您整理了“Javascript 運(yùn)動(dòng)中Offset的bug解決方案”,方便廣大網(wǎng)友查閱!

    我們先來(lái)看看這個(gè)bug 是怎么產(chǎn)生的。

    代碼如下:

    <style type="text/css">

    #div1 {

    width: 200px;

    height: 200px;

    background: red;

    }

    </style>

    代碼如下:

    <body>

    <div id="div1">

    </div>

    </body>

    以下是用來(lái)測(cè)試的Javascript代碼 ,目的是 讓div慢慢變窄。

    代碼如下:

    <script type="text/javascript">

    setInterval(function(){

    var oDiv=document.getElementById("div1");

    oDiv.style.width=oDiv.offsetWidth-1+'px';

    },30);

    </script>

    Javascript 代碼 很簡(jiǎn)單,運(yùn)行一下 沒(méi)有任何問(wèn)題,如愿的div在慢慢變小。

    那這個(gè)offset 的bug又是怎么來(lái)的呢?

    下面我們動(dòng)動(dòng)樣式 就會(huì)神奇的事情發(fā)生了。。。

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

    代碼如下:

    <style type="text/css">

    #div1 {

    width: 200px;

    height: 200px;

    background: red;

    border: 1px solid #CCCCFF;

    }

    </style>

    此時(shí)在運(yùn)行代碼 ,發(fā)現(xiàn)div 居然往右邊慢慢增大。。。image BUG 驚現(xiàn)。。。。 明明是減1 為什么會(huì)出現(xiàn)這種情況。

    讓我們想想offset 有什么特點(diǎn):

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

    那么,我們說(shuō)回來(lái),運(yùn)動(dòng)剛開(kāi)始的時(shí)候,實(shí)際上div 的寬度是200px 那么offsetWidth 是202

    這個(gè)時(shí)候 oDiv.style.width=oDiv.offsetWidth-1+'px'; 這句話(huà)就是等于 oDiv.style.width=202-1=201px; 然后在賦值給width

    當(dāng)再次執(zhí)行這句話(huà)的時(shí)候 div的寬度是 201px; 這樣的話(huà),每次都會(huì)增加1px,反而慢慢變大了。 這就是offset 的bug 。

    怎么解決這個(gè)問(wèn)題呢?

    其實(shí)不用這個(gè)offsetWidth 就可以了 。 我們用 width !! 寫(xiě)個(gè)函數(shù)直接獲取 css樣式中width 即可

    獲取不在行間中的樣式 :

    代碼如下:

    function getStyle(obj, name) {

    if (obj.currentStyle) {

    return obj.currentStyle[name];

    } else {

    return getComputedStyle(obj, null)[name];

    }

    }

    那么我們?cè)谛薷南略瓉?lái)的代碼:

    代碼如下:

    <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>

    這樣程序運(yùn)行就不會(huì)有任何問(wèn)題了。

    更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

    更多信息請(qǐng)查看腳本欄目
    易賢網(wǎng)手機(jī)網(wǎng)站地址:Javascript 運(yùn)動(dòng)中Offset的bug解決方案
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類(lèi)型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專(zhuān)用圖標(biāo)
    聯(lián)系電話(huà):0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
    咨詢(xún)QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)