1. 程式人生 > >jquery-outerHeight(true)的值有誤問題解決辦法(chrome瀏覽器)

jquery-outerHeight(true)的值有誤問題解決辦法(chrome瀏覽器)

問題描述:

    我想獲取一個容器元素的高度(包含margin+padding+height+border),容器中包含圖片,當我在chrome瀏覽器中除錯移動到容器元素上的時候,我通過Jquery中 $('element').outerHeight(true) 所獲取到的值並不是我想要的值,而是比我想要獲取到的值更小。 這個容器元素的樣式中包含容器本身的寬度width,position:relative和子元素裡position:absolute在火狐瀏覽器(FireFox)中,jquey的outerHeight(true)的方法可以獲取到盒子容器的高度(margin+border+padding+height);但是在chrome瀏覽器中卻怎麼也獲取不到正確的值。

原因:

     如果容器中包含有圖片元素,如果圖片元素沒有能夠及時的載入完成,這個時候,計算的outerHeight(true)的值就會不包含圖片的值,所以獲取的到值會比你需要的值小。

解決辦法:

    先判斷圖片載入完成,然後再計算容器的outerHeight(true)的值。

判斷圖片載入完成的方法:

JavaScript方法判斷單個元素:

通過指定圖片元素的onload方法,判斷圖片是否載入完成:

<img src="images/1.jpg" id="img" alt=""/>
<script>
    document.getElementById("img").onload=function(){
    console.log('圖片載入完成!');
}
</script>

所有瀏覽器都顯示出了“loaded”,說明所有瀏覽器都支援img的load事件。

通過readystatechange事件判斷圖片是否載入完成:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>img - readystatechange event</title>
</head>
<body>
    <img id="img1"src="http://pic1.win4000.com/wallpaper/f/51c3bb99a21ea.jpg">
    <p id="p1">loading...</p>
    <script type="text/javascript">
        img1.onreadystatechange =function() {
            if(img1.readyState=="complete"||img1.readyState=="loaded"){
                p1.innerHTML ='readystatechange:loaded'
            }
        }
    </script>
</body>
</html>

readyState為complete和loaded則表明圖片已經載入完畢。測試IE6-IE10支援該事件,其它瀏覽器不支援。

通過complete判難圖片是否載入完成:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>img - complete attribute</title>
</head>
<body>
    <img id="img1"src="http://pic1.win4000.com/wallpaper/f/51c3bb99a21ea.jpg">
    <p id="p1">loading...</p>
    <script type="text/javascript">
        functionimgLoad(img, callback) {
            vartimer = setInterval(function() {
                if(img.complete) {
                    callback(img)
                    clearInterval(timer)
                }
            }, 50)
        }
        imgLoad(img1,function() {
            p1.innerHTML('載入完畢')
        })
    </script>
</body>
</html>

輪詢不斷監測img的complete屬性,如果為true則表明圖片已經載入完畢,停止輪詢。該屬性所有瀏覽器都支援。

Jquery方法判斷多個img全部完成載入:

<script type="text/javascript">
    $(function(){
	$('.pic1').each(function() {
	        $(this).load(function(){
		    $(this).fadeIn();
	        });
        });
    });
</script>

注意,不要在$(document).ready()裡繫結load事件。

這樣判斷圖片載入完成後,在通過jquery 的outerHeight(true),就可以獲取整個容器元素的高度啦

內容參考:https://stackoverflow.com/questions/10268892/outerheighttrue-gives-wrong-value

                https://blog.csdn.net/zhuchunyan_aijia/article/details/52016962