对于AJAX请求,在jscrollpane jsp-scroll-y事件上停止事件传播

时间:2013-03-01 11:24:10

标签: ajax events jscrollpane jquery-jscrollpane

我正在遇到一种情况!

每当用户滚动到滚动条的最底部时,我都会尝试更新jscrollpane中的内容。

没有找到解决方案,当滚动条处于底部时,我尝试发送ajax请求。

但是,每当滚动条获得atBottom时,事件就会进入一个不停的运行过程。

我尝试使用event.stopPropagation(),但没有成功!

以下是我正在使用的代码:

$( 'div.scroll-pane-produts' ).bind( 'jsp-scroll-y',
    function( event, scrollPositionY, isAtTop, isAtBottom ) {
        if( isAtBottom ) {
            event.stopPropagation();
            // $.post('some-url');
            alert('infinite alerts from here');
        }   
    }
).jScrollPane();

虽然问题本身与来自jscrollpane的事件有关,但我也很欣赏通过ajax请求更新DIV内容的另一种解决方案!

提前致谢...

1 个答案:

答案 0 :(得分:0)

这不是这个问题的直接答案,但我偶然发现谷歌是因为我的滚动条一直反复发射事件,即使我没有滚动。

原来这是因为我使用的是autoReinitalise,它每500毫秒重新初始化滚动条,无论内容是否已添加/删除该区域。

我添加了一些代码来阻止这种情况发生。除非高度已经改变,否则我添加的代码将阻止它被触发。

首先,我添加了一个名为prevHeight的变量,并将其设置为0

然后在229行左右我调整了代码:

if (settings.autoReinitialise && !reinitialiseInterval) {
     reinitialiseInterval = setInterval(
          function () {
               var clientHeight = pane[0].clientHeight; //Add this line of code
               if (prevHeight !== clientHeight || prevHeight === 0) { //Add this condition
                    initialise(settings);
                }
                prevHeight = clientHeight ; //Add this line of code
            },
            settings.autoReinitialiseDelay
     );
}

注意:我只关心垂直滚动条,我没有使用任何水平滚动条。如果你关心两个检查,你会想要两个检查(一个用于垂直检查,一个用于水平检查)。你只需要创建一个prevWidth变量,然后根据`pane [0] .clientWidth进行检查。

这解决了我的问题,希望它可以帮助其他人遇到此页。