2013-03-26 50 views
0

我得到了一個基於水平滾動重新定位的(動態添加的)元素,這意味着它可以離開屏幕。附加到這個元素,還有另一個不能離開屏幕,它必須留在屏幕上。所以我的想法是使用一個事件處理程序,它會在您滾動時要求元素的位置。如果position-left屬性的值低於某個數字,則附加的元素將重新定位。jQuery:(live)scroll動態添加元素的事件處理程序?我該如何解決這個問題

你知道這些類型的元素,它就像一個菜單/導航,與你一起滾動到某個點,然後顯示爲位置固定。

我試過了,但它不工作,可能是因爲元素是用javascript添加的。我也試過live("scroll"..,但那也沒用。

$(window).scroll(function(ev) { 
alert($("#scrElem").position().left); 
    alert("work");  
    if ($("#scrElem").position().left >= 203) { 
     $("#scrElem .attElem").css("left", ($("#scrElem").position().left - 203) + "px"); 
    }; 
}); 

編輯:

也許這會有所幫助: 我使用tinyscrollbar插件,這是它(http://baijs.nl/tinyscrollbar/js/jquery.tinyscrollbar.js)的可讀版本。基本上這個插件在滾動時觸發事件。這就是我想要的,我甚至看到他做到了:

oWrapper[0].addEventListener('DOMMouseScroll', wheel, false); 
oWrapper[0].addEventListener('mousewheel', wheel, false); 
oWrapper[0].addEventListener('MozMousePixelScroll', function(event){ 
    event.preventDefault(); 
}, false); 
+0

難道你不能在滾動到某個點後設置'position:fixed'嗎? – Horen 2013-03-26 16:40:52

+0

是的,我可以,但事件沒有找到我的元素,因爲它是在DOM ready事件之後很久才創建的。 – user828591 2013-03-27 08:15:41

回答

-1

這對獨立,你會追加到容器的工作,但不破壞.main_container

$(document).on('scroll', '.main_container', function() { 



}); 
+3

你的例子不適合我,它不給我任何反饋(警告等)。 – user828591 2013-03-27 08:14:19

+0

它不應該......這只是爲了檢查如何將一個事件綁定到一個DOM元素並保持它一直活着,您可以在函數內部任何位置進行操作。 – tbem 2013-03-27 10:46:50

+1

當然,我改變了你的例子以適應我的情況。它仍然行不通,但我找到了一個不同的,適當的解決方案。 – user828591 2013-03-27 12:08:57

-1
對象

而尋找一個不同的問題,我幸運地找到了一種方法,使之在我的情況下工作:

var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" 
$("#scrElem").live(mousewheelevt, function(e){ 
// do my position stuff 
}); 

這麼簡單,它的作品!

-1

這種孤子的問題:

var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; 

是,當我點擊滾動條並拖動它滾動這是行不通的。

我意識到的是,你不需要附加滾動事件就好像它是一個動態元素。只要把它看作是靜態的:

$("#scrElem").on('scroll', function(e){ 
// do my position stuff 
}); 

而且這個功能完美!