2013-05-07 53 views
1

我一直在使用jQuery的.height()函數來計算視口高度,然後調整css以在窗口內定位div。切換到jQuery時停止窗口高度計算1.9.1

這一切都很好,直到我切換到jQuery 1.9.1,現在它已經退出運行。我嘗試了1.9.1和1.8.2之間的一些來回測試,關閉其他jQuery函數,看看是否有一些衝突,但在1.8.2和一切都工作正常,但window.height代碼工作正常1.9.1

我的基本代碼如下,我希望有人能夠啓發我,我可能需要做不同的工作,使這項工作與1.9.1(我喜歡使用由於網站內的其他功能,該代碼僅在主頁上使用)。第一個將整個背景圖像設置爲div的高度,第二個將某些文本置於頂部。

var splashpos = $(window).height() - 121; 
    $('#splash').css({"height": splashpos + "px"}); 

    var splashttlpos = $(window).height() - 308; 
    $('.splashttl').css({"top": splashttlpos + "px"}); 

感謝

附加位

添加我的評論普遍回到問題本身。文檔類型設置爲html <!DOCTYPE html>。 #splash div設置爲position:relative,而.splashttl div設置爲position:absolute。頁面設置爲body(100%寬度) - > div#splash(100%寬度) - > div.wrap(內容寬度爲90%) - > div.splashttl(位置:absolute顯示在右下角)。

jQuery代碼,第一部分是設置飛濺到該背景圖像的高度僅覆蓋視口,向下滾動顯示整體白色背景。第二部分是調整position:top的​​最高值,以便div位於視口底部的上方。

再次,它使用jQuery 1.8.2完美工作,但不適用於jQuery 1.9.1(並且我已經關閉所有其他腳本以消除衝突,無濟於事)。我在jQuery Migrate腳本中添加了它。

那麼誰能告訴我1.8.2和1.9.1之間.height()有什麼變化。而我需要修改我的代碼?我在jQuery文檔中找不到任何引用。

解決(或多或少)

只是一時興起,我決定嘗試改變哪些腳本出現在網頁上的順序。當我將代碼移動到啓動代碼下面的內容滑塊時,它開始工作。我不知道爲什麼,因爲當我評論出內容滑塊腳本時,它沒有任何區別,但是當我將它移動時,它的確降低了。

它對我來說是一個謎,但現在一切正常。感謝所有我得到的反饋。

+0

不知您DOCTYPE .... – Wazzzy 2013-05-07 12:40:51

回答

0

問題是怪癖模式,jQuery不支持並且在1.8版本中不支持。
如果您docktype是這樣的:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

嘗試將其更改爲:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

或像這樣:

<!DOCTYPE HTML> 

參考Quirks_Mode

+0

它已經被設置爲<!DOCTYPE HTML!> – Tom 2013-05-07 14:02:09

0

它應該工作,必須是別的,這是一個演示: jsfiddle

$(document).on('click', function() { 
    var h = $(window).height(); 
    var w = $(window).width(); 
    alert('height: ' + h + '/width: ' + w); 
}); 

你可以使用document.height代替(jsfiddle-2),但它是更好地理解是什麼問題並解決它。

$(document).on('click', function() { 
    var h = document.height; 
    var w = document.width; 
    alert('height: ' + h + '/width: ' + w); 
}); 

而且,你不需要爲「PX」添加到splashTopPos,如果沒有指定其他值,jQuery的默認

1

只是測試它的像素。它會工作,如果你要爲splashttl類定義'位置'。 例如:

.splashttl{ 
    position:relative; 
} 

否則jquert將設置.splashttl的 '頂' proprt爲 '自動' 出於某種原因

---編輯---

嘗試這樣的:

$(document).ready(function(){ 
    var splashpos = $(window).height() - 121; 
    $('#splash').css({"height": splashpos + "px"}); 

    $('.splashttl').css({"top": $('#splash').height() - $('.splashttl').height() + 'px', 'left': $(document).width() - $('.splashttl').width() + 'px'}); 
}); 

再比如這裏:http://freedockstar.com/test.php

並且回答你的另一個問題「1.8.2和1.9.1之間」.height()發生了什麼變化「:我看不到任何東西。它總是返回元素的高度,仍然沒有...

+0

所有的div被設置爲位置:相對 – Tom 2013-05-07 14:08:04

+0

以及將prolly意味着,你的代碼還有其他問題。 這項工作就像你期望的那樣:http://freedockstar.com/test.php – patryk 2013-05-07 16:31:58

+0

實際上.splashttl被設置爲position:absolute,因爲它出現在右下角。而且jQuery應該重新計算最高值,這樣它就會出現在相同的位置,而不管視口大小如何。但正如我前面提到的一切使用jQuery1.8.2完美工作,除了這些window.height函數以外的所有東西在jQuery1.9.1中正常工作 – Tom 2013-05-08 04:51:31