3

我在尝试在 jQuery 加载后立即滚动浏览器窗口时遇到问题。内容加载正常,加载完成后调用的函数正在被调用。但是,如果我将超时设置为 300 毫秒,我只能让页面实际滚动:

frame.html("#box").load("loadedfile.php", function(){
   setTimeout(function() {
       $('html,body').animate({
          scrollTop: $("#framed").offset().top
          }, 750);
       },300);
    });

加载完成功能似乎在内容加载之后执行,但在浏览器能够滚动之前(因为承载脚本的页面最初的长度不足以激活滚动条)。

我的解决方法感觉草率,可能是。有没有更好的方法来处理这个问题?超时似乎不是处理此问题的可靠方法。

除了 .animate 之外,我还尝试过 window.scrollTo 以及 jQuery scrollTo 插件

4

2 回答 2

2

您可以使用 ajax 调用来加载外部页面,并且在成功后您可以使用所有滚动动画。

$.ajax({
        url: 'loadedfile.php',
        dataType: "html",                 // <-- set dataType to "html"
        success: function(response) {
            $("#box").html(response).fadeIn(1000); // <-- added fadeIn()
        $('html,body').animate({
            scrollTop: $("#framed").offset().top
          }, 750);
        }
    })

希望它对你有用。如果没有,请提供链接以实际查看您的问题,以便对其进行整理。

于 2012-08-24T10:06:46.147 回答
1

这段代码对我有用

lastElementTop = $('#id').position().top;
scrollAmount = lastElementTop  +- something;
$('html,body').animate({scrollTop: scrollAmount},1000);
于 2015-06-29T08:51:05.103 回答