Angularjs 每次鼠标滚动时都会调用ngInfiniteScroll-loadMore()方法 下面是关于评论的解决方案。

Angularjs 每次鼠标滚动时都会调用ngInfiniteScroll-loadMore()方法 下面是关于评论的解决方案。,angularjs,nginfinitescroll,Angularjs,Nginfinitescroll,问题:我的loadMore()方法在每个容器的滚动上执行 意思是:在父容器的每个鼠标滚动上执行loadMore()(infinite scroll parent=“true”) 所需结果:要获取loadMore(),请仅在InfiniteSrollDistance满足其条件时执行,而不是执行任何微小的滚动 我的代码深受&的启发 我的应用程序是一个照片库。 我通过ajax调用加载照片,并将它们填充到缩略图指示转发器中。 我在控制器初始化时禁用ng Infinite Scroll,并在回调成功时启用

问题:我的loadMore()方法在每个容器的滚动上执行

意思是:在父容器的每个鼠标滚动上执行loadMore()(
infinite scroll parent=“true”

所需结果:要获取loadMore(),请仅在InfiniteSrollDistance满足其条件时执行,而不是执行任何微小的滚动

我的代码深受&的启发

我的应用程序是一个照片库。 我通过ajax调用加载照片,并将它们填充到缩略图指示转发器中。 我在控制器初始化时禁用ng Infinite Scroll,并在回调成功时启用它

    <div class="thumbnails grid__item page--content">
            <div id="gallery" class="unstyled-list" 
                    infinite-scroll='loadMore()' 
                    infinite-scroll-disabled='album.busy' 
                    infinite-scroll-parent="true" 
                    infinite-scroll-immediate-check="false" 
                    infinite-scroll-distance='2'>
                    <my-photo-directive ng-repeat="photo in photos"></my-photo-directive>
            </div>
    </div>
我的缩略图指令是相同的。毫不奇怪,当最后一张照片填充到中继器上时,我启用了该组件

    app.directive 'myPhotoDirective', ['$window', ($window) ->
        return {} =
            ....
            link: (scope, element, attrs) ->
                if scope.$last
                    scope.album.busy = false
我不知道我错过了什么或做错了什么。 我希望有人会来帮助我


谢谢。

如果不想查看实际代码,我将直接向您介绍ngInfiniteScroll常见问题解答:

为什么ngInfiniteScroll会在每一个屏幕上触发我的表情 滚动事件?

infiniteScroll指令使用其所在元素的高度 附加到,以确定离底部的距离 是窗户。在某些情况下,浏览器可以报告高度为0, 这导致了这种行为。通常,这是由于一个容器 只包含浮动子元素的元素。最简单的修复方法 这个问题是要添加一个“间隔”元素的底部 容器(类似于
;更多细节


我已经解决了我的问题。

NIS(NGNIMITITCHOLL)度量的基础属性之一是<代码> $容器< /代码>和<代码> $ELEM

  • $container
    是滚动元素的父元素
  • $elem
    是包含滚动元素的元素
  • 范例

    
    
    NIS试图做的是,在每次鼠标滚动时(如果启用),计算这两个元素之间的关系,并检查
    $elem
    是否高于
    $container
    ,然后向下滚动。(它还检查其他属性,如-距离、立即检查和禁用)

    因此,这两个基本元素之间的关系对于理解和调试NIS至关重要

    所以我的问题就是-$container和$elem在高度上是相等的。
    我在这两个元素上都有固定的css高度值(100%)(主要是因为我在文档中读到我必须通过高度),并且错误地修复了
    $elem
    ,这是完全错误的


    其次-
    无限滚动距离也会导致这种情况发生。
    
    如果您正在设置的值很高(比如说2),并且您的
    loadMore()
    方法没有填充足够的项,即使您禁用该方法的运行时,您将得到无限的
    loadMore()
    执行。

    让我加上我的两分钱,有完全相同的问题,不同的解决方案!我一整天都在调试无限卷轴。有一次,我意识到javascript报告
    $(窗口).height()==$(文档).height()
    ,这毫无意义

    我在谷歌上搜索了一下,当您缺少DOCTYPE时就会出现这种情况:


    但是,这还不够!我的DOCTYPE曾一度被浏览器吃掉。您可以进一步阅读:

    我也有类似的问题,只是当我到达容器末尾时,infinite scroll甚至不会停止加载(我使用了v1.2中的infinite scroll容器选项)。经过长时间的调试,我注意到容器高度是float(例如634.245px),而内部元素高度接近它,但int(例如635px)和它会反复触发循环,因为它认为已经达到了底部限制。ng infinite scroll的问题在于它的可视性和不处理实际数据,因此我必须检查从后端返回的数据,并在结果为空时阻止它(infinite scroll禁用了相关函数)。

    我发现html格式应该与此类似,以便nginfinitescroll工作。增加了一个固定高度的虚拟外部div解决了我的问题

    <div style="height:500px;">
       <div  infinite-scroll="myPagingFunction()">
         <div  ng-repeat="x in images"></div>
       </div>
    </div>
    
    
    

    希望它能帮助到别人。

    这似乎很明显,但我有一天没有注意到

    我遵循了图中所示的示例:

    需要注意的重要部分是滚动距离:

    infinite-scroll-distance="3"
    
    根据,

    如果浏览器窗口的高度为1000像素,且“无限滚动距离”设置为2,则当元素底部在浏览器窗口底部2000像素范围内时,将计算无限滚动表达式。默认值为0(例如,当元素底部穿过浏览器窗口底部时,将计算表达式)

    在我的开发过程中,我只有约50个项目显示,并认为,尽管不正确,NIS是无限发射。事实上,它只是想填满4000像素


    TL;DR:如果设置了无限滚动距离,请删除(或至少减少)无限滚动距离。

    花大量时间来解决这个问题。对我来说,无限卷轴的方法被称为无限卷轴,所以我做了一些研究&得出结论,这是因为我的代码中无限卷轴的“div”的高度是0,根本没有增加,所以它一直认为用户在页面的末尾。因此,我的解决方案是在无限卷轴的“div”的下一个元素中添加一个“clearfix”html类。

    如果你能在plunker中重新创建它,这样我们就可以看到错误所在。它有点复杂。。。。。这是一个应用程序下的开发,我还不能公开它。。。这是整个应用程序,可能是
    <div style="height:500px;">
       <div  infinite-scroll="myPagingFunction()">
         <div  ng-repeat="x in images"></div>
       </div>
    </div>
    
    infinite-scroll-distance="3"