以编程方式确定要添加“滚动”侦听器的DOM元素

时间:2009-10-06 18:43:01

标签: firefox dom javascript-events

我正在编写Firefox插件,大部分时间都是使用

document.addEventListener("scroll", scrollListener, false);

工作得很好。但是在cuil.com上没有用。基本上任何具有固定页眉或页脚不会滚动的网站都会导致上述代码出现问题。如何确定将事件侦听器添加到哪个元素?

1 个答案:

答案 0 :(得分:0)

使用

document.addEventListener("scroll", scrollListener, true);

的工作原理。事件监听器被调用。我仍然需要获取根元素来获取滚动值。在我的情况下,我有一个后代元素开始。无论如何,这是我在onScroll函数中使用的代码的一部分。

if(!x.scrollObj){
 x.scrollObj = x.doc;
 var scrollObj = x.bElem.parentNode;
 while( scrollObj && scrollObj.nodeName != 'BODY'){
  var overflowY = x.doc.defaultView.getComputedStyle( scrollObj, null ).overflowY;
  if(  overflowY == 'auto' || overflowY == 'scroll'){
   x.scrollObj = scrollObj;
   break;
  }
  scrollObj = scrollObj.parentNode;
 }
}

var w = x.doc.defaultView;
var scrollY = w.scrollY, scrollHeight = x.doc.body.scrollHeight;
if( x.scrollObj&& x.scrollObj != x.doc ){
 scrollY = x.scrollObj.scrollTop;
 scrollHeight = x.scrollObj.scrollHeight;
}

我在设置onScroll函数之前尝试过确定scrollObj,但是在cuil.com中,他们实际上是稍后设置了溢出。