语义 UI & ReactJS、MeteorJS、无限滚动不在可见性中调用 onBottomVisible()

Semantic UI & ReactJS, MeteorJS, infinite scroll not calling onBottomVisible() in visibility

更新 #1:根据下面的答案,这在 Safari 中有效,但在 MacBook Pro 上无效 Chrome。 更新 #2:根据下面的 JSfiddle w/ReactJS 和 Chrome,这个问题在没有 Meteor 的情况下是可重现的。然而,它永远不能与 Meteor 一起使用,即 react-packages Atmosphere 包,除非 1) 将 Chrome 放入开发工具移动设备模式并将其添加到 index.html

<meta name="viewport" content="initial-scale=1" />

ReactJS 应用中的语义 UI 无限滚动未调用 .visibility 中的 onBottomVisible()onBottomVisible 滚动到页面底部时永远不会调用 get。

我尝试将 height 强加到 <div className="myfeed"> 上,但这只会在加载时触发 onBottomVisible() 回调,而不会在滚动到底部时触发。

查看下面的代码和这些 JSfiddle 的:

CSS:

.myfeed {
    height: 200px;
}

ReactJS / JavaScript:

var App = React.createClass({

    componentDidMount: function() {
        $('.myfeed').visibility({
            once: false,

            // update size when new content loads
            observeChanges: true,

            // load content on bottom edge visible
            onBottomVisible: function() {
                console.log("infiniateScroll ... called.");    
                alert("infiniateScroll ... called.");    
          }
        });
    },

    render: function() {

        var showFeedHTML = [];
        for (var i=0; i < 20; i++) {
            showFeedHTML[i] = (
                <li key={ i }>
                    { i }: stuff
                </li>
            );
        }

        return (
            <div className="myfeed">
                <h3>Semantic UI & ReactJS: Infinite Scroll Example</h3>
                { showFeedHTML }
            </div>    
            );
    }
});


React.render(<App />, document.getElementById('container'));

删除 css,它工作得很好。我添加了更多记录,因此您不会对 JSFiddle javascript window 的高度感到困惑。 Here 编辑了 JSFiddle。

var App = React.createClass({
  componentDidMount: function() {
    $('.myfeed').visibility({
      once: false,
      observeChanges: true,
      onBottomVisible: function() {
        console.log('infiniateScroll ... called.');
        alert('inifiniateScroll ... called.');
      }
    });
  },

  render: function() {

    var showFeedHTML = [];
    for (var i=0; i < 100; i++) {
      showFeedHTML[i] = (
        <li key={ i }>
          { i }: stuff
        </li>
      );
    }

    return (
      <div className="myfeed">
        <h3>Semantic UI & ReactJS: Infinite Scroll Example</h3>
        { showFeedHTML }
      </div>    
    );
  }
});


React.render(<App />, document.getElementById('container'));

我通过添加 offset 在 OS X 上的 Chrome 中实现了这个功能。仅适用于具有健康偏移的 Chrome。所需的值似乎取决于 DOM 元素的嵌套深度。

这是 JSfiddle 的更新:http://jsfiddle.net/2wvfjpy9/17/

componentDidMount: function() {
    $('.myfeed').visibility({
        once: false,

        offset: 5, // Only works on Chrome with a healthy offset. 
                   // Value required seems to depend on how deeply 
                   // the DOM element is nested.

        // update size when new content loads
        observeChanges: true,

        // load content on bottom edge visible
        onBottomVisible: function() {
            console.log("infiniateScroll ... called.");    
            alert("infiniateScroll ... called.");    
      }
    });
},