Titanium 钛无限卷轴:不工作

Titanium 钛无限卷轴:不工作,titanium,titanium-mobile,titanium-modules,Titanium,Titanium Mobile,Titanium Modules,我试图添加视图到我的滚动视图时,它达到40%的滚动。我就是这样做的: scrollView.add(//add first 10 initial containerView's); var triggerScroll = true; var scrollPercentage = 0; scrollView.addEventListener('scroll', function(e) { var devHeight = Ti.Platform.displayCaps.platformHeig

我试图添加视图到我的滚动视图时,它达到40%的滚动。我就是这样做的:

scrollView.add(//add first 10 initial containerView's);
var triggerScroll = true; 
var scrollPercentage = 0; 
scrollView.addEventListener('scroll', function(e) { 
var devHeight = Ti.Platform.displayCaps.platformHeight; 
    var currPos = scrollView.contentOffset.y;
    if(currPos > devHeight){
        currPos = currPos - devHeight;
    }

    scrollPercentage = (currPos)/devHeight * 100;

    if(scrollPercentage > 40 && triggerScroll){
        triggerScroll = false;
        var containerView = myapp.createMyView();
        scrollView.add(containerView);
    }

    //reset scroll to true after the offset reaches end of the screen, so that the 
    //'scroll' event listener only gets called ONCE every time it crosses 40%
    if(scrollPercentage > 101){
        triggerScroll = true;
    }

});

但它只是不起作用。我试图在垂直滚动视图中支持无限滚动。知道哪里出了问题吗?

我在处理无限滚动时使用下面的模块。它使用的是
表格视图
,但我认为您也可以将其应用于ScrollView。您需要传入一个
函数
,当
表视图
注册需要加载更多内容时,将调用该函数

加载完成后,必须调用
loadingDone
-函数,以启用
TableView
启动另一个加载序列

m_bNoDataFound
确保在列表中没有更多数据可填充时,加载顺序不会启动

如果希望加载顺序在滚动过程中迟早启动,您可以更改偏移量(Android当前为
0.75
,iOS当前为
0.90

function TableView( onLoad ) {
    var isAndroid = Ti.Platform.osname === 'android' ? true : false;

    var m_bNoDataFound = false;
    var m_nLastDistance = 0;
    var m_bPulling = false;
    var m_bLoading = false;

    var table = Ti.UI.createTableView( {
        height : Ti.UI.FILL
    } );

    table.addEventListener( 'scroll', function( evt ) {
        //Scroll to load more data
        if( !m_bNoDataFound ) {
            if( isAndroid ) {
                if( !m_bLoading && ( evt.firstVisibleItem + evt.visibleItemCount ) >= ( evt.totalItemCount * 0.75 ) ) {
                    onLoad( true );
                    m_bLoading = true;
                }
            }
            else {
                var nTotal = evt.contentOffset.y + evt.size.height;
                var nEnd = evt.contentSize.height;
                var nDistance = nEnd - nTotal;

                if( nDistance < m_nLastDistance ) {
                    var nNearEnd = nEnd * 0.90;

                    if( !m_bLoading && ( nTotal >= nNearEnd ) ) {
                        onLoad( true );
                        m_bLoading = true;
                    }
                }

                m_nLastDistance = nDistance;
            }
        }
    } );

    function m_fLoadingDone( a_bNoDataFound ) {
        m_bNoDataFound = a_bNoDataFound;

        if( m_bLoading )
            setTimeout( function( ) {
                m_bLoading = false;
            }, 250 );
    }

    return {
        table : table,
        loadingDone : m_fLoadingDone
    };
};

module.exports = TableView;
函数表视图(onLoad){
var isAndroid=Ti.Platform.osname=='android'?true:false;
var m_bNoDataFound=假;
var m_nLastDistance=0;
var m_bPulling=假;
var m_bloding=错误;
var table=Ti.UI.createTableView({
高度:Ti.UI.FILL
} );
表.addEventListener('scroll',函数(evt){
//滚动以加载更多数据
如果(!m_bNoDataFound){
if(isAndroid){
如果(!m_bloding&&(evt.firstVisibleItem+evt.visibleItemCount)>=(evt.totalItemCount*0.75)){
onLoad(真);
m_bloding=真;
}
}
否则{
var nTotal=evt.contentOffset.y+evt.size.height;
var nEnd=evt.contentSize.height;
var nDistance=nEnd-nTotal;
如果(距离=nNearEnd)){
onLoad(真);
m_bloding=真;
}
}
m_nLastDistance=距离;
}
}
} );
函数m_fLoadingDone(a_bNoDataFound){
m_bNoDataFound=a_bNoDataFound;
如果(m_bloding)
setTimeout(函数(){
m_bloding=假;
}, 250 );
}
返回{
表:表,,
加载完成:m_fLoadingDone
};
};
module.exports=TableView;

在scrollview中集成无限滚动时,您必须考虑以下重要事项:

1。滚动事件被多次触发:尝试使用下划线限制滚动事件回调

Throttle创建并返回传递函数的新的、受限制的版本,当重复调用时,该版本实际上最多每等待毫秒调用一次原始函数。用于限制发生速度快于您所能跟上的事件的速率。有关更多信息,请参阅下划线JS文档

2。Android与iOS上的默认单位和系统单位:Android上的视图大小使用不同于视图坐标的显示单位。单位不匹配将导致无限滚动的触发器计算不正确。要解决这个问题,您必须自己获取并设置默认单位。可以在此小部件中找到解决方案(请参阅getDefaultUnit()):

3。ti infini scroll可以帮助您做到这一点:此库围绕默认的ti scroll视图创建一个包装器。此包装包含滚动结束的计算(用于更新/获取新数据的触发器)。使用此库时,不要忘记实现项目符号2。

myapp.createMyView()是否返回具有设置属性的视图?或者只是一个空的视图对象?一个具有设置属性的视图..从外观上看,此代码将只添加一个视图。添加一个视图后。triggerScroll设置为false,这将使if语句失败,但当滚动偏移量超过DevHight时,scrollPercentage设置为大于100的数字。这将重置triggerScroll布尔值。我已发现问题,正在尝试找到解决方案:)。scrollPercentage不会达到101,直到您滚动了屏幕长度的两倍。但是,这不适用于scroll view。但对于表视图,它工作得很好。