2015-10-05 137 views
1

我有一種感覺什麼曾經給我的問題,我試圖找到一個解決方案在這個問題 - Can't trigger a jquery function with scroll on a particular div - 可能負責滾動相關的問題在這裏。.scrollTop(0)不工作讓一個div滾動到頂部

短版:無法獲得此,或任何類似,工作

$("#Container3").scrollTop(0); 

什麼也沒有發生真正的,沒有錯誤在控制檯,沒有怪異的行爲,只是似乎忽略了scrollTop的(0)請求。

龍版本:我很抱歉,但因爲它是一個複雜的應用程序一樣的界面,但我會盡力解釋這個問題,以我的能力張貼代碼片段是不可行的:

  • 移動響應式網站,根據屏幕的不動產加載不同的界面。
  • 最小的界面由3部分組成 - 頂部導航,底部搜索和中間內容。
  • 內容大多在使用過程中加載,而不是在頁面加載時加載。
  • 在按下重新加載特定div內容的按鈕時,爲了便於使用,我還需要將該div滾動到頂部。
  • 雖然它似乎沒有影響我的問題(刪除它並沒有解決問題),我應該透露我使用hammer.js來模擬觸摸事件,因爲它可能會影響解決方案。

加載是在視口之外完成的,所以不需要動畫,但只要他們得到這個工作,我就會帶着它們。

這是我的jQuery的要求是什麼樣子

$(document).on("click",".NavRowButton",function(event){ 
    $("#Container3").scrollTop(0); 
    var $targetButtonId=$(event.target).attr("id"); 
    $("#Content").load("/load/login/"+$targetButtonId+".php"); 
    $("#DisplayContentName").html("<span class='NavColSpan'>"+$targetButtonId+"</span>"); 
    $("#Container3").find(".WindowBorder").css("top","0"); 
}); 

#Container3有滾動條,是#內容的直接父。

這是一個功能我還在建設,是這個問題我之前也有過,我使用的是什麼,現在來幫助調試這個問題的解決方法:

document.addEventListener('scroll',function(event){ 
    if(event.target.className==='Container'){ 
     var $currentScroll=$(event.target).scrollTop(); 
     console.log($currentScroll); 
     var $targetId=$(event.target).attr("id"); 
     console.log($targetId); 
    } 
},true); 

在此先感謝。

編輯︰我只注意到,如果我把一個$(event.target).scrollTop(0);在滾動距離調試功能結束時,它實際上重置了滾動,所以似乎只要div是event.target,它可以從外部工作,因爲在點擊功能期間我可能不會適當地選擇它。

EDIT2:正好我可以緩存event.targets到變量,並用獲得()點擊功能我敢肯定,我選擇合適的元素,以便它只是留下里面怎麼scrollTop的(0 )方法起作用。

他們現在這個樣子(也有添加一個條件來限制負載事件):

全局變量:

$DivTestVar=""; 

點擊:

$(document).on("click",".NavRowButton",function(event){ 
    var $targetButtonId=event.target.id; 
    if($targetButtonId != $("#DisplayContentName").html()){ 
     $($DivTestVar).scrollTop(0); 
     console.log($($DivTestVar).get()); 
     $("#Content").load("/load/login/"+$targetButtonId+".php"); 
     $("#DisplayContentName").html($targetButtonId); 
     $("#Container3").find(".WindowBorder").css("top","0"); 
    }; 
}); 

滾動調試:

document.addEventListener('scroll',function(event){ 
    if(event.target.className==='Container'){ 
     $DivTestVar=event.target; 
     var $currentScroll=$($DivTestVar).scrollTop(); 
     console.log($currentScroll); 
     var $targetId=event.target.id; 
     console.log($targetId); 
    } 
},true); 

如果在滾動console.log($($ DivTestVar).get())之前單擊,返回空,但如果在第一次滾動它開始返回正確的DOM元素。無論如何,scrollTop(0)都將被忽略。

編輯3:我只想留下一個小小的更新。我已經放棄了我在這裏嘗試使用類似效果的方法,但不像我試圖實現的那樣友好。因此,我不再關心這個人,但如果你正在閱讀這個問題並且有類似的問題,我已經多次遇到這個問題以達到較小的效果,現在我認爲它與position有關:fixed;元素以及scrollTop()是如何處理的,但我沒有時間深入研究它,所以祝你好運和神速。

+0

很想看到一個jsfiddle展示問題。 – davidkonrad

+1

標記爲:*尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。 ]你的問題要包括一個JS/HTML/CSS代碼片段來重現錯誤(使用最少量的代碼)。見[mcve]。 – BSMP

+0

「不起作用」不是很具描述性。描述_精確_發生了什麼,以及它與你的希望和夢想有什麼不同! –

回答

3

你試過純JS版嗎?

document.getElementById('Container').scrollTop = 0 
+0

我其實沒有,沒有遇到它,所以它從來沒有真正跨過我的腦海去嘗試它。在任何情況下,它也不起作用:| –

+0

嘗試使用scrollTop(0)重新加載div #Container內容 – Gael

+0

試過了,不起作用。:|我會像這樣離開它,以確保它不會造成最壞的情況。 –

1

據我所知,您有兩種可能性。

1-滾動整個頁面,直到用jQuery到達您的#Content div位置的頂部。

2-你的#Content是在一個div內的滾動,其中scrollTop(0)將爲此工作(例如:http://jsfiddle.net/zkp07abu/)。

+0

不幸的是,我不能滾動整個頁面,因爲我要有超過1個可滾動的div。我也很確定我選擇了正確的div,因爲我實際上是console.logging同一個div的scrollTop()值,以幫助調試另一個函數。我只是想在繼續之前我應該​​照顧這個。 –

+0

另一種可以嘗試的方式是,如果它在單擊按鈕後滾動,則可以找到父級或兄弟「#Content」,根據body/html獲取頂部,並將scrollTop等於該變量。 – Cheshire

+0

我添加了對問題的看法的簡要說明。 #Content樹上的任何內容都不會滾動,所以我只能控制#Container3上的滾動。將scrollTop設置爲0是唯一的出路,如果我無法做到這一點,我將不得不改變我在界面的這一部分中看待的方式。 –