离子:获取离子含量中当前可见的项目

时间:2016-02-08 14:54:13

标签: angularjs ionic-framework lazy-evaluation

我的应用中有一个长的,可滚动的ion-content区域,使用collection-repeat填充了项目。

我需要知道哪些项目对用户可见。

我无法使用$ionicScrollDelegate.getScrollPosition来计算答案,因为每个项目的高度都不同(项目高度按每个项目计算)。

1 个答案:

答案 0 :(得分:5)

结束自己计算元素的总高度,并通过查询translateY元素的.scroll值,我可以找出卷轴可见部分中的哪个项目。< / p>

它正在重新发明轮子,但是有效。

当我加载项目时,我调用ScrollManager.setItemHeights(heights)heights是项目高度数组(以像素为单位)),并获取当前可见项目的索引:ScrollManager.getVisibleItemIndex()

angular.module("services")
.service('ScrollManager', function() {
  var getTranslateY, getVisibleItemIndex, setItemHeights, summedHeights;
  summedHeights = null;
  setItemHeights = function(heights) {
    var height, sum, _i, _len;
    summedHeights = [0];
    sum = 0;
    for (_i = 0, _len = heights.length; _i < _len; _i++) {
      height = heights[_i];
      sum += height;
      summedHeights.push(sum);
    }
  };

  // returns the style translateY of the .scroll element, in pixels
  getTranslateY = function() { 
    return Number(document.querySelector('.scroll').style.transform.match(/,\s*(-?\d+\.?\d*)\s*/)[1]);
  };

  getVisibleItemIndex = function() {
    var i, y;
    y = -getTranslateY();
    i = 0;
    while (summedHeights[i] < y) {
      i++;
    }
    return i;
  };

  return {
    setItemHeights: setItemHeights,
    getVisibleItemIndex: getVisibleItemIndex
  };
});