splitview(jquery mobile)を使用してパネルのスクロール位置を取得します
-
27-10-2019 - |
質問
SplitViewを使用してWebAppを実装しました - http://asyraf9.github.com/jquery-mobile/ - (それはscrollviewコンポーネントを使用しているようです)jqueryモバイルとともに。すべてが正常に機能します...
パネル内に、スクロールがリストの最後に到達するときに要素を動的に追加する要素のリストがあります。 iPhoneでは、SplitViewではなくIsCrollを使用します - http://cubiq.org/iscroll - そして、これを達成するための次のコード(そしてそれは機能しています)。
HTML:
<div data-role="panel" data-id="menu" data-hash="crumbs" style="z-index: 10000;" id="Panel">
<div data-role="page" id="Root" class="Login" onscroll="console.log('onscroll');">
<div data-role="content" data-theme="d" onscroll="console.log('onscroll');">
<div class="sub">
<ul data-role="listview" data-theme="d" data-dividertheme="a" class="picListview" id="PortfolioList">
<!-- Content added dynamically -->
</ul>
</div>
</div>
</div>
</div>
JavaScript:
var defaultIScrollOptions = {
useTransition: true,
onScrollStart: function() {
this.refresh();
},
onScrollEnd: function() {
if (this.elem && this.id) {
possiblyDisplayNextDocuments(this.y, this.elem, this.id);
}
}
};
iScrolls.push(new iScroll(document.getElementById("searchResults").parentNode, defaultIScrollOptions));
しかし、splitviewを使用する場合、どのイベントとリスナーをバインドする要素が、どのようにスクロール位置を取得するかを本当に知りません。私はすでにいくつかの組み合わせを試しましたが、良い結果は得られませんでした。最高のものは次のとおりでした:
$("#PortfolioList").scrollstop(function(event) {
console.log("scrollstop: "+$("#PortfolioList").scrollTop());
});
私の質問は、私は適切なイベントリスナーを使用していますか(それはすでにスクロールアニメーションがまだ使用されていることを解雇しているので)、どのようにスクロール位置を取得できますか?
解決
ScrollViewプラグインを使用しないでください。そのバギー。 Androidと同様に、iOS PhoneGapアプリの両方にisCrollを使用します。両方で正常に動作します。
スクロールを検出し、新しい要素をリストにロードするには、IsCrollの「Onscrollmove」イベントを聞いてください。
iscroll-wrapper.jsにこれを追加します -
options.onScrollMove = function(){
that.triggerHandler('onScrollMove', [this]);
};
次に、コードでイベントハンドラーをOnScrollMoveイベントに添付し、その中に新しい行の追加を処理します。
onscrollmoveは、スクロールするたびに発射されます。
ハンドラーでは、リストにいくつの行があり、どの行があなたのビューポートの上部にあるかを見つけることができます。
iscrollScrollEventHandler:function(event){
var contentDiv= $('div:jqmData(id="main") .ui-page-active div[data-role*="content"] ul li' );
var totalItemsonList = contentDiv.length;
var cont =$('div:jqmData(id="main") .ui-page-active div:jqmData(role="content")');
var itemToScrollOn = totalItemsonList - x; // x is the item no. from the top u want to scroll on. u need to keep updating i guess
var docViewBottom = $(cont).scrollTop() + $(cont).height();
var itemOffset = $(contentDiv[itemToScrollOn]).offset();
if(itemOffset){
var elemTop = itemOffset.top;
if (elemTop <= docViewBottom){
event.data.callback();
}
}
}
コールバックでコードを追加して新しい行を追加します。それが役立つことを願っています。