2

当用户到达底部时在 HTML 页面中加载新内容非常流行(FB、G+、Twitter),所以我也想在 XPages(它使用 Dojo)中实现它。看着 SO(和附近)我发现有关 JQuery 和/或通用的问题hereherehereherehere here here here here 仅举 几例。

但是在 Dojo 中如何做到这一点呢?

4

2 回答 2

4

我不知道 Dojo 是如何做到的,但您可以使用纯 JavaScript DOM API 来做到这一点。

我已经在移动控件中完成了此操作。从http://www.openntf.org/Projects/pmt.nsf/downloadcounter?openagent&project=XPages%20Mobile%20Controls&release=4.5.0&unid=2D4F47CB07AAEE4086257887004ED6C5&attachment=MobileControls450.zip查看 MobileControlsLite.nsf(mView.xsp 和 mobileControls.js)

以下是我的应用程序中的一些片段:

function scrollingDetector() {
    ...

    var pos = window.pageYOffset;
    var max = document.documentElement.scrollHeight - document.documentElement.clientHeight;

    if (max - 80 < pos) {   
        onMoreButtonClick(...);
    }
}   

setInterval(scrollingDetector, 500);    
于 2012-05-09T06:10:05.280 回答
2

不幸的是,我无法评论 Niklas 的回答,但他的回答是正确的。我要更改的一件事是在您滚动到底部而不是调用特定函数的情况下发出 Dojo 事件。

var scrollingDetector = (function() {
    var max = calculateScrollHeight();

    return function(){
        if (max < window.pageYOffset) {   
            max = calculateScrollHeight();
            dojo.publish('/newsApp/onScrollBottom');
        }
    }
    function calculateScrollHeight(){
        return (document.documentElement.scrollHeight - document.documentElement.clientHeight) - 80; 
    }
})();   

setInterval(scrollingDetector, 500);    

(出于性能考虑,我还冒昧地进行了一些重构,因为我们只需要在到达页面底部时重新计算高度)。

这将允许您在代码的其他地方挂钩此事件,而无需编辑此代码段或覆盖 onMoreButtonClick() 函数。

于 2012-05-10T09:51:42.323 回答