2013-03-26 15 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 
}); 

而且这个功能完美!