【问题标题】:scroll() event not firing when attached to a div附加到 div 时,滚动()事件未触发
【发布时间】:2014-12-01 15:05:18
【问题描述】:
<div class="row">
    <div class="col-md-8" id="homeview-story"></div>
    <div class="col-md-4" id="homeview-stream">
        <div id="log"></div>
    </div>
</div>
#homeview-story {
    overflow: scroll;  
    width: 72%; 
    height: 800px;
}
#homeview-stream { 
    overflow: scroll;  
    width: 28%; 
    height: 800px;
}
$(document).ready(function() {
    $('#homeview-story').scroll(function() {
        $("#log").append("<div>Handler for .scroll() called.</div>");
    });
});

目标是分别为homeview-storyhomeview-stream实现无限滚动以加载各自的数据。滚动功能适用于窗口 obj ($(window).scroll),但不适用于特定 div。

【问题讨论】:

  • 它正在工作test

标签: javascript jquery html css scroll


【解决方案1】:

"scroll" 仅在元素实际可滚动/滚动时有效。如果你想要滚动数据而不考虑元素大小,如果你的浏览器支持,你可以使用"wheel"

document.addEventListener("wheel", function(event) {
    console.log(event);
});

【讨论】:

    【解决方案2】:

    我遇到了和你一样的问题,我通过将我希望由scroll() function 触发的特定选择器放在$(window).scroll() function 中来解决它,如下所示:

    $(window).scroll(function() {
        $('#homeview-story').scroll(function() {
            $("#log").append("<div>Handler for .scroll() called.</div>");
        });
    });
    

    我不确定此解决方案是否是解决此问题的正确方法,但对我来说效果很好。

    【讨论】:

    • 这样做,每次用户滚动页面,事件将再次绑定到 div...
    【解决方案3】:

    问题在于,#homeview-story 没有溢出,所以它没有滚动。首先,它应该有一些大于滚动的内容,这在您的代码中是缺失的。

    这是一个Demo,其中#logo 的高度大于它的父#homeview-stream,我们正在听它的滚动。

    【讨论】:

    • 我的问题还没有完全解决。 $('#homeview-story').height = 800 $('#homeview-story')[0].scrollHeight = 1375 所以 div 中有内容大于 div 高度。它仍然对我不起作用。有什么想法吗?
    • 你能分享重现这个问题的代码吗,例如,一些示例内容,滚动不起作用..?
    【解决方案4】:

    在#homeview-story 中放置一个内部div

    <div class="row">
    <div id="homeview-story">
        <div class="inner"></div>
    </div>
    <div id="homeview-stream"></div>
    </div>
    
    $(document).ready(function() {
       $('#homeview-story').bind('scroll',function() {
           var html = "<div id='log'>Hello</div>";
           $('#homeview-stream').append(html);
       });
    });
    

    希望这个demo 可以帮助您实现您想要实现的目标。

    【讨论】:

    • 添加内部 div 本身并没有完成任何事情。仅在您的示例中,您设置了高度,以便它会溢出父 div。添加任何大量内容都会产生相同的结果,这就是无限滚动的工作原理。
    【解决方案5】:

    嗯,我看不出有什么不适合你。这是一个有效的fiddle

    必须粘贴一些代码:

    $(document).ready(function() {
    $('#homeview-story').scroll(function() {
        $("#log").append("<div>Handler for .scroll() called.</div>");
    });
    });
    

    【讨论】:

    • 是的,小提琴似乎奏效了。好吧,我在可滚动的 div 中添加了很多图块(作为 div 标签),这不起作用。可能是 homeview-story 中的内容没有设置的问题,因为它需要执行滚动。
    【解决方案6】:

    您实际上是在#homeview-story div 内滚动吗?所以不是页面本身,因为 jquery scroll() 事件显然需要 (http://api.jquery.com/scroll/)

    您是在引导 CSS 之后加载自定义 CSS 吗?否则,您的 div 可能仍未设置为溢出:滚动。嗯,再三考虑可能会因为您引用的是 ID。只是为了确定。

    【讨论】:

    • 不确定在 div 内实际滚动是什么意思。是的,我的 css 是在引导 css 之后加载的。
    • 不知道如何更好地表达:滚动条是在页面的右侧,还是您的两列都有滚动条?您需要滚动 div/列本身才能触发 scroll() 事件。因此,在您的案例中,列内的内容需要大于 800 像素。
    • 我的问题还没有完全解决。 $('#homeview-story').height = 800 $('#homeview-story')[0].scrollHeight = 1375 所以 div 中有内容大于 div 高度。它仍然对我不起作用。
    • 好的,最好用它不起作用的程度更新您的问题。我认为您应该看看也可以工作的小提琴。祝你好运。
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多