2012-12-01 52 views
1

我想添加視圖時,我的滾動視圖,當它達到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; 
    } 

}); 

但它只是不工作。我正在嘗試在垂直滾動視圖中支持無限滾動。任何想法出了什麼問題?

+0

does myapp.createMyView()返回具有set屬性的視圖嗎?或者只是一個空的視圖對象? –

+0

設置屬性的視圖.. – sharath

+0

從它的外觀來看,此代碼只會添加一個視圖。添加一個視圖後。 triggerScroll設置爲false,這將失敗if語句 –

回答

1

在使用無限滾動時,我使用下面的模塊。它使用TableView,但我認爲你也可以將它應用到ScrollView。您需要傳入一個function,當TableView註冊更多內容時應該調用。

當您完成加載後,您必須調用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; 
+0

雖然這並不適用於滾動視圖。但通過桌面視圖,它運行良好。 – Fenil

1

當滾動視圖中集成的無限滾動,還有一些重要的事情,你必須考慮:

1.滾動事件被觸發了很多:嘗試使用underscoreJS掐死你的滾動事件回調。

油門創建並返回一個新的,節流的傳遞函數,即,反覆調用時,只能實際調用原函數每每等待的毫秒最多一次的版本。對速度限制事件有用,速度限制事件的發生速度比您可以跟上的要快。有關更多信息,請參閱underscorejs文檔。在Android

2.缺省和系統單元VS的iOS: Android上的視圖的大小使用不同的顯示單元比的圖的座標。單位的這種不匹配會導致無限滾動觸發器的錯誤計算。要解決這個問題,你必須自己獲取並設置默認單位。該解決方案可以在這個小窗口中找到(見getDefaultUnit()):https://github.com/FokkeZB/nl.fokkezb.color/blob/master/controllers/widget.js

3. TI-INFINI滾動可以幫助您與此:這個庫圍繞創建默認鈦滾動型的包裝。這個包裝器包含滾動結束的計算(用於更新/獲取新數據的觸發器)。使用此庫時,請不要忘記實施第2號子彈。 https://github.com/goodybag/ti-infini-scroll