Titanium 钛无限卷轴:不工作
我试图添加视图到我的滚动视图时,它达到40%的滚动。我就是这样做的: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
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。但对于表视图,它工作得很好。