2012-12-01 44 views
2

我有一個按鈕back-to-top固定在屏幕的左側 - 它使用scrollTop滑動滾動到頁面的頂部,當它被點擊。當頁面加載時,該按鈕是可見的,並且不包括任何可讀的內容等。如何隱藏在「漂浮」在DIV上時粘貼的按鈕?

當用戶向下滾動頁面時,該按鈕會覆蓋具有文本內容的某些DIV。當按鈕進入這樣的DIV時,我希望它使用.hide()隱藏。不能得到它的工作,這是我有:

var p = $('a.back-to-top'); 
    var position = p.position(); 

    if(position == $('#about-me')){ 
     $('a.back-to-top').hide(); 
    } 

if(position == $('#about-me'))檢查按鈕的位置在#about-me DIV正確的方法是什麼?或者,我應該爲DIV創建一個類似於position的變量嗎?

編輯:甲混亂,但簡單fiddle

+0

你能發佈一個簡單的演示顯示代碼的相關/ [SSCCE](http://sscce.org/)樣品,你有這麼遠,在[JS小提琴](http://jsfiddle.net/),或類似? –

回答

3

您需要在回調中檢查內容,可能是$(window).scroll,這樣每次窗口滾動時都會檢查它;否則,只有在頁面加載時纔會檢查它。

我不認爲你要使用position要麼因爲這是相對於父母的位置。相反,你可能想要.offset。這將返回一個包含topleft成員的對象。 ==比較沒有任何意義,特別是對於jQuery對象。你想用:

$(window).on('scroll', function() { 
    var offset = $("a.back-to-top").offset().top; 

    var within = $("#about-me").offset().top; 

    if (offset >= within && offset <= within + $("#about-me").height()) { 
     $("a.back-to-top").hide(); 
    } 
    else { 
     $("a.back-to-top").show(); 
    } 
});​ 

與滾動的,如果它有一個固定位置的.back-to-top變化抵消,但抵消了靜態塊不會改變,所以你可以做這種比較。

看到它在行動:http://jsfiddle.net/QnhgF/

+0

我沒有意識到那個位置返回了一個陰影,我認爲它會給我類似於使用screen.width的東西。我對jQuery已經足夠新了!欣賞解釋和解決方案。 – MattSull

3

http://api.jquery.com/position/ - 位置()方法返回已經。左的位置對象和賽拓樸性質。所以基本上,你不能將位置與選擇器返回的某個對象進行比較。相反,你應該比較兩個元素的「頂」屬性值。 例如您有:

var p = $('a.back-to-top'); 
var position = p.position(); 

也得到這樣的:

var aboutMePosition = $('#about-me').position(); 

然後你就可以比較:

aboutMePosition.top和position.top你需要哪個方式。

+0

如果2個DOM元素是包含在同一個DOM容器中的直接兄弟元素,這應該是正確的。 –

+0

如果沒有 - 你可以使用偏移量()而不是位置():) – povilasp