jQuery无限滚动导致链接暂时不起作用?

发布于 2024-12-18 00:56:22 字数 258 浏览 2 评论 0原文

几周前我用 jquery 实现了一个无限滚动页面。滚动本身效果很好,但我得到了一个非常奇怪的副作用。

当我滚动并加载新内容时,在前几秒钟内所有链接都不起作用。事实上,页面上任何地方的链接都不会在几秒钟内起作用。如果我滚动得非常远,例如连续快速加载 5 个页面,情况似乎会变得更糟 - 然后我必须等待 20 秒才能单击页面上任何位置的任何链接。

我在使用 Firefox 或 IE8 时也有同样的经历,所以我猜这不是浏览器的问题。

有什么想法或解决办法吗?

A couple of weeks ago I implemented an infinite scrolling page with jquery. The scrolling itself works great, but I'm getting a very strange side effect.

When I scroll and the new content loads, none of the links work for the first few seconds. In fact, no links anywhere on the page work for a couple of seconds. And it seems to get worse if I scroll really really far, for instance loading 5 pages in quick succession - then I'll have to wait 20 seconds before any of the links anywhere on the page are clickable.

I'm having the same experience using Firefox or IE8, so I'm guessing it's not the browser.

Any ideas what the cause or fix is?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青萝楚歌 2024-12-25 00:56:22

还有这个问题吗?

问题:

  • 页面加载 20 秒后,链接是否可以点击?浏览器是否“冻结”了 20 秒,还是只是链接无法点击?
  • 要加载更多内容,是显示“显示更多”的链接,还是用户点击页面底部后自动加载内容?
  • 您是否使用 jQuery 的 .scroll() 来更新内容?

初步想法:

  • 您是否对不可点击的链接使用 .click() 或 .bind('click', function) ?尝试使用 .live('click', function) 代替。
  • 尝试使用 setTimeout。对于某些浏览器,jQuery 的 .scroll 会在滚动条发生变化的每个像素时调用处理函数...而不是在所有滚动完成后调用,这可能会导致函数调用过载。尝试这样的操作,当您滚动时它不会执行 1000 个函数调用(这只是一个简单的示例......代码可能会更好):

    <脚本类型=“text/javascript”>
        var 滚动= false;
        $(document).scroll('setScroll');
    
        函数 setScroll() {
            滚动 = setTimeout(doScrollUpdate, 300);
        }
    
        函数 doScrollUpdate() {
            清除超时(滚动);
            // 在这里做你的ajax工作
        }
    
    

Still have this problem?

Questions:

  • After 20 seconds once the page loads are the links clickable? Is the browser "frozen" for 20 seconds or is it just the links that arn't clickable?
  • To load more content is it a link that says "show more" or is the content automatically loaded once the user hits the bottom of the page?
  • Are you using jQuery's .scroll() to update the content?

Initial Thoughts:

  • Are you using .click() or .bind('click', function) for the links that arn't clickable? Try .live('click', function) instead.
  • Try using a setTimeout. For some browser jQuery's .scroll calls the handler function every pixel the scrollbar is changed... not once all the scrolling is done which can cause an overload of function call. Try something like this do that it doesn't do 1000 function calls when you scroll (this is just a quick example... code could be better):

    <script type="text/javascript">
        var scrolling = false;
        $(document).scroll('setScroll');
    
        function setScroll() {
            scrolling = setTimeout(doScrollUpdate, 300);
        }
    
        function doScrollUpdate() {
            clearTimeout(scrolling);
            // Do your ajax stuff here
        }
    </script>
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文