ユーザーが最下部に到達したときに HTML ページに新しいコンテンツをロードすることは非常に一般的 (FB、G+、Twitter) であるため、XPages (Dojo を使用) にもそれを実装したいと考えています。SO (および近く) を見ると、JQuery および/または一般的なhereとhereとhereとhereと hereと hereと hereと hereと hereと hereに関する質問がいくつか見つかります。
しかし、Dojo でそれを行うにはどうすればよいでしょうか。
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);
残念ながら、ニクラスの答えについてコメントすることはできませんが、彼の答えは正しいです。私が変更したいことの 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() 関数をオーバーライドしたりしなくても、コードの他の場所でこのイベントにフックできます。