2012-06-17 28 views
8

我正在使用dhtmlx甘特圖UI組件,它有任務列表和圖形圖表。任務列表和圖形圖表包含在兩個單獨的div元素中,該元素同步並行滾動。通過滾動圖表區域,任務列表自動滾動,任務行位置與甘特圖行位置匹配。爲什麼有時scrollTop/scrollLeft不可寫?

檢查組件的源代碼,我發現了同步由下面的代碼來實現:

this.oData.onscroll = function() { 
    self.panelTime.scrollLeft = this.scrollLeft; 
    self.panelNames.scrollTop = this.scrollTop; 
}; 

在UI控制所有HTML標記由JavaScript動態生成的。除了花費很長時間渲染800-ish任務列表之外,所有工作都很好。

爲了提高渲染時間,我決定構建自己的服務器端渲染模塊,以生成與最初生成的客戶端相同的HTML標記。這個標記是使用普通的jquery $ .get()從客戶端獲取的,並使用$(el).html()注入頁面。然後我將必要的事件處理程序作爲原始客戶端版本。

現在的問題是平行滾動不起作用。我可以在圖表區域捕獲滾動事件,但我無法設置任務列表區域的scrollTop屬性。我在firebug中測試以手動強制scrollTop屬性,但值沒有改變。看來,scrollTop屬性是隻讀的。

對此有任何解釋嗎?

回答

9

無法向下滾動到元素內容的底部(或右側)下方。如果該元素有overflow: visible(默認值),或者至少與其內容一樣大,那麼這兩個滾動屬性將被卡在0中。同樣,即使有隱藏的東西滾動到視圖中,您也無法滾動到最後;如果將scrollTop或scrollLeft設置爲比合理的值更大的值,則會降低到最大值。

我的猜測是在你的情況下,你試圖在內容加載之前滾動div,並且它拒絕滾動,因爲沒有任何東西可以滾動到視圖中。

+0

謝謝你的解釋。我想我已經錯過了元素,所以scrollTop屬性轉到錯誤的div。 –

相關問題