代码之家  ›  专栏  ›  技术社区  ›  Tom

防止DIV滚动的最大堆栈调用错误

  •  0
  • Tom  · 技术社区  · 15 年前
     scroller1   scroller2
    ----------- -----------
    |this is o| |this is a|
    |ne elemen| |nother el|
    |t, four l| |3 lines  |
    |ines     | |         |
    ----------- -----------
    

    这是一个简单的例子。 我已经建立了一个系统,它将滚动到每个滚动条中的第n个元素,但是也使用分数,这样如果滚动条1在元素4处,而滚动条1在元素5的一半处,滚动条2的效果也是一样的。

    但当我调用函数“onscroll”时,它将另一个滚动条设置到正确的位置,但随后调用“onscroll”,因为更改其滚动条是滚动的。这反过来重复自己,直到javascript抛出 Max Stack Call 错误,或两个滚动条都到达底部。

    如何预防这种情况?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Brian Campbell Dennis Williamson    15 年前

    创建全局变量, currentlyHandlingScrollEvent 把你的 onscroll 基于它的代码:

    var currentlyHandlingScrollEvent = false;
    function handleScroll (e) {
      if (!currentlyHandlingScrollEvent) {
        currentlyHandlingScrollEvent = true;
        // do stuff ...
        currentlyHandlingScrollEvent = false;
      }
    }
    
    scroller1.onscroll = handleScroll;
    scroller2.onscroll = handleScroll;