Получить положение прокрутки панели с помощью SplitView (JQuery Mobile) - PullRequest
1 голос
/ 17 февраля 2012

Я реализовал WebApp, используя SplitView - http://asyraf9.github.com/jquery-mobile/ - (и, похоже, использует компонент ScrollView) вместе с jQuery Mobile. Все отлично работает ...

Внутри панели у меня есть список элементов, которые должны динамически добавлять элементы, когда прокрутка достигает конца списка. На 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());
});

У меня вопрос: использую ли я правильный приемник событий (поскольку он уже запускается, хотя анимация прокрутки все еще используется) и как мне получить позицию прокрутки?

1 Ответ

0 голосов
/ 17 февраля 2012

не используйте плагин scrollview. это глючит. Используйте iscroll как для приложений iOS, так и для Android. Он отлично работает на обоих.
Чтобы обнаружить прокрутку и загрузить новые элементы в список, прослушайте событие 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();
        }
    }
}

и в обратном вызове добавьте код для добавления новых строк. надеюсь, что это поможет.

...