2

ユーザーが最下部に到達したときに HTML ページに新しいコンテンツをロードすることは非常に一般的 (FB、G+、Twitter) であるため、XPages (Dojo を使用) にもそれを実装したいと考えています。SO (および近く) を見ると、JQuery および/または一般的なherehereherehereherehereherehereherehereに関する質問がいくつか見つかります。

しかし、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

残念ながら、ニクラスの答えについてコメントすることはできませんが、彼の答えは正しいです。私が変更したいことの 1 つは、特定の関数を呼び出す代わりに、一番下までスクロールした場合に 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 に答える