0

我有一个(动态添加的)元素,它基于水平滚动重新定位,这意味着它可以离开屏幕。附加到该元素,还有另一个可能不会离开屏幕,它必须留在屏幕上。所以我的想法是使用一个事件处理程序,它在你滚动时询问元素的位置。如果 position-left 属性低于某个数字,则附加的元素将重新定位。

你知道这些元素,它就像一个菜单/导航,它会随着你滚动到某个点,然后看起来是固定位置的。

我试过这个,但它不起作用,可能是因为元素是用 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);
4

3 回答 3

-1

这个解决方案的问题:

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

是当我通过单击滚动条并拖动它滚动时它不起作用。

我意识到你不需要附加滚动事件,就好像它是一个动态元素一样。只需将其视为静态的:

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

而且效果很好!

于 2014-05-15T19:48:04.543 回答
-1

在寻找不同的问题时,我幸运地找到了一种方法来使它在我的情况下工作:

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

就这么简单,它有效!

于 2013-03-27T12:15:17.943 回答
-1

这独立于您将附加到容器的对象将起作用,但不要破坏 .main_container

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



});
于 2013-03-26T17:51:03.723 回答