最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript獲取隱藏元素(display:none)的高度和寬度的方法

 更新時(shí)間:2014年06月06日 11:56:21   作者:  
這篇文章主要介紹了javascript獲取隱藏元素(display:none)的高度和寬度的方法,實(shí)現(xiàn)方法比較復(fù)雜,需要的朋友可以參考下

js獲取可見(jiàn)元素的尺寸還是比較方便的,這個(gè)可以直接使用這個(gè)方法:

復(fù)制代碼 代碼如下:

function getDefaultStyle(obj,attribute){ // 返回最終樣式函數(shù),兼容IE和DOM,設(shè)置參數(shù):元素對(duì)象、樣式特性
 return obj.currentStyle?obj.currentStyle[attribute]:document.defaultView.getComputedStyle(obj,false)[attribute];
}


但是如果這個(gè)元素是隱藏(display:none)的,尺寸又是未知自適應(yīng)的,哪有上面的方法就不行了!因?yàn)閐isplay:none的元素是沒(méi)有物理尺寸的! 悲劇就這樣發(fā)生了!

幸好css中還有visibility:hidden,不可見(jiàn)屬性,他和display:none最大的區(qū)別就是visibility:hidden有物理尺寸。有物理尺寸就可以通過(guò)上面的方法獲取尺寸,但是將display:none改成visibility:hidden后頁(yè)面就有一塊空白在那里,即使在你獲取尺寸后在馬上將visibility:hidden改成display:none頁(yè)面那部分還是會(huì)抖動(dòng)一下。那么最好的辦法就是將這個(gè)隱藏的元素移出屏幕或者脫離文檔流( position: absolute)。這樣似乎非常完美了,但是悲劇又發(fā)生了,如果你要再顯示這個(gè)元素的時(shí)侯這個(gè)元素是不可見(jiàn)的,位置也不對(duì),因?yàn)檫@是這個(gè)元素visibility:hidden;position: absolute。所以在獲取尺寸后還要將樣式還原回去。就是將position和visibility屬性設(shè)回原來(lái)的樣式。

這就是js獲取隱藏元素的尺寸基本實(shí)現(xiàn)方式,大家有興趣可以看看《精通javascript》這本書上的方法。

我這里也做了個(gè)簡(jiǎn)單的demo,大家可以看看源代碼:

復(fù)制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js獲取隱藏元素的尺寸</title>
<style type="text/css">

</style>
<script type="text/javascript" src="http://www.css88.com/tool/css3Preview/jquery-1.4.2.min.js"></script>
</head>

<body>
 <div id="test_display_block" style="display:none; border:10px solid #CDCDCD; margin-left: 100px">這是test容器,可見(jiàn)容器<br />這是test容器,可見(jiàn)容器<br />這是test容器,可見(jiàn)容器<br />這是test容器,可見(jiàn)容器<br />這是test容器,<br />這是test容器,<br />這是test容器,<br />這是test容器,<br />這是test容器,<br /></div>
 <div id="test_display_none" style="display:none; border:10px solid #CDCDCD">這是test容器,這是test容器,<br />這是test容器,<br />這是test容器,<br />這是test容器,<br />這是test容器,<br />這是test容器,<br /></div>
        <div id="test_display_click">點(diǎn)我</div>
        <script type="text/javascript">
            //判斷對(duì)象類型
 function getType(o){
            var _t;
            return ((_t = typeof(o)) == "object" ? o==null && "null" || Object.prototype.toString.call(o).slice(8,-1):_t).toLowerCase();
        }
        //獲取元素樣式
 function getStyle(el, styleName) {
            return el.style[styleName] ? el.style[styleName] : el.currentStyle ? el.currentStyle[styleName] : window.getComputedStyle(el, null)[styleName];
        }
 function getStyleNum(el, styleName) {
            return parseInt(getStyle(el, styleName).replace(/px|pt|em/ig,''));
        }
 function setStyle(el, obj){
  if (getType(obj) == "object") {
   for (s in obj) {
    var cssArrt = s.split("-");
    for (var i = 1; i < cssArrt.length; i++) {
     cssArrt[i] = cssArrt[i].replace(cssArrt[i].charAt(0), cssArrt[i].charAt(0).toUpperCase());
    }
    var cssArrtnew = cssArrt.join("");
    el.style[cssArrtnew] = obj[s];
   }
  }
  else
   if (getType(obj) == "string") {
    el.style.cssText = obj;
   }
 }
 function getSize(el) {
        if (getStyle(el, "display") != "none") {
            return { width: el.offsetWidth || getStyleNum(el, "width"), height: el.offsetHeight || getStyleNum(el, "height") };
        }
        var _addCss = { display: "", position: "absolute", visibility: 'hidden' };
        var _oldCss = {};
        for (i in _addCss) {
            _oldCss[i] = getStyle(el, i);
        }
 setStyle(el, _addCss);
        var _width = el.clientWidth || getStyleNum(el, "width");
        var _height = el.clientHeight || getStyleNum(el, "height");
        for (i in _oldCss) {
            setStyle(el, _oldCss);
        }
        return { width: _width, height: _height };
    } 
var dd=document.getElementById("test_display_block");  
alert(getSize(dd).height);
document.getElementById("test_display_click").onclick=function(){
 dd.style.display="block";
        document.getElementById("test_display_none").style.display="block";
}
alert($("#test_display_none").height());
 </script>
</body>
</html>

題外話:一般js的框架,庫(kù)都已經(jīng)封裝了這個(gè)方法,比如jQ,我們可以直接使用 height()和width()方法獲取隱藏元素的尺寸。

相關(guān)文章

  • JavaScript隱式類型轉(zhuǎn)換例子總結(jié)

    JavaScript隱式類型轉(zhuǎn)換例子總結(jié)

    這篇文章主要介紹了JavaScript隱式類型轉(zhuǎn)換例子總結(jié),熟練掌握類型轉(zhuǎn)換,理解其中的規(guī)律。可以讓你的代碼更簡(jiǎn)潔更安全,下文圍繞主題JS隱式轉(zhuǎn)換,需要的朋友可以參考一下
    2022-08-08
  • ES6中Object.assign方法使用詳解

    ES6中Object.assign方法使用詳解

    這篇文章主要給大家介紹了關(guān)于ES6中Object.assign方法使用的相關(guān)資料,Object.assign可以用來(lái)處理數(shù)組,但是會(huì)把數(shù)組視為對(duì)象,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • javaScript的函數(shù)對(duì)象的聲明詳解

    javaScript的函數(shù)對(duì)象的聲明詳解

    這篇文章主要介紹了javaScript的函數(shù)對(duì)象的聲明詳解,需要的朋友可以參考下
    2015-02-02
  • JS如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素綁定事件

    JS如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素綁定事件

    這篇文章主要介紹了JS如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素綁定事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JavaScript?Map?和?Object?的區(qū)別解析

    JavaScript?Map?和?Object?的區(qū)別解析

    在JavaScript中,Map 和 Object 看起來(lái)都是用鍵值對(duì)來(lái)存儲(chǔ)數(shù)據(jù),那么他們有什么不同呢,這篇文章主要介紹了JavaScript?Map?和?Object?的區(qū)別,需要的朋友可以參考下
    2022-08-08
  • Javascript中Fetch請(qǐng)求Coze API并流式展示請(qǐng)求結(jié)果

    Javascript中Fetch請(qǐng)求Coze API并流式展示請(qǐng)求結(jié)果

    文章介紹了如何使用Fetch API處理CozeAPI返回的流式響應(yīng),并在前端進(jìn)行實(shí)時(shí)展示,文章提供了處理流式響應(yīng)的步驟和示例代碼,包括使用fetch發(fā)起POST請(qǐng)求、讀取響應(yīng)體流、逐步處理數(shù)據(jù)塊以及更新UI,感興趣的朋友一起看看吧
    2025-02-02
  • JS讀取XML文件示例代碼

    JS讀取XML文件示例代碼

    讀取XML文件的方法有很多,在本文為大家詳細(xì)介紹下使用js是如何做到的,感興趣的朋友可以參考下本文
    2013-11-11
  • 解決layer 動(dòng)態(tài)加載select 失效的問(wèn)題

    解決layer 動(dòng)態(tài)加載select 失效的問(wèn)題

    今天小編就為大家分享一篇解決layer 動(dòng)態(tài)加載select 失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • js+html5繪制圖片到canvas的方法

    js+html5繪制圖片到canvas的方法

    這篇文章主要介紹了js+html5繪制圖片到canvas的方法,涉及html5元素操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 一句話JavaScript表單驗(yàn)證代碼

    一句話JavaScript表單驗(yàn)證代碼

    純屬技術(shù)交流,在實(shí)際應(yīng)用中不建議那么做。建議js加載比較好。
    2009-08-08

最新評(píng)論

临朐县| 洛隆县| 阳高县| 宜春市| 始兴县| 昌江| 贺州市| 潞西市| 霍城县| 利津县| 济源市| 五大连池市| 松原市| 太谷县| 交城县| 通化市| 大兴区| 廉江市| 瑞安市| 友谊县| 靖远县| 凭祥市| 宝山区| 体育| 天峨县| 桐城市| 衡水市| 大埔县| 岱山县| 蓬溪县| 金塔县| 梧州市| 石嘴山市| 马关县| 柳河县| 诏安县| 乐业县| 广安市| 德江县| 会东县| 宣威市|