2

搜索了很多,但找不到太多关于这个的..

我有一个通过循环处理很多事情的页面,我把它放在了 php 页面的顶部:

ob_implicit_flush(true);
ob_end_flush();

这很高兴将循环泵出到我的浏览器窗口,但是内容正在从页面底部滚动,我必须手动向下滚动。所以我的问题是:如何让页面或浏览器窗口随内容滚动?

我在某处使用 javascript setInterval 开始和结束滚动可能会起到作用,听起来可能就是这种情况 - 只需让页面在脚本开头开始滚动并在脚本结束时结束......但我不是很棒的 javascript 但希望有人能告诉我该怎么做?

我能想到的另一个解决方案是以某种方式让 javascript 强制关注特定元素类或正在生成的东西..但这似乎是一个潜在的笨拙选项..

任何快速提示都会很棒。

谢谢!

4

2 回答 2

1

使用这个 javascript:

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

document.documentElement.scrollTop = getDocHeight();

您可以简单地添加该行

document.documentElement.scrollTop = getDocHeight();

到您发送给客户端以更新滚动条的每一件...

或者

将此行代码添加到输出的开头:

var scroller = setInterval(function() {  
    document.documentElement.scrollTop = getDocHeight();
}, 100 /*update intervall in ms*/);

并将这一行放在输出的末尾:

clearInterval(scroller);
于 2013-06-03T17:44:38.870 回答
1

无需添加数千行代码,只需在输出顶部添加一个简短的函数,并在末尾添加一行。这有效(在开头添加 html 并在结尾添加 /html 标记以使其漂亮;虽然不需要):

<script>
var scroller = setInterval(function() {  
    window.scrollTo(0,document.body.scrollHeight);
}, 10); // update every 10 ms, change at will
</script>
<?php
// generate 1000 lines of html code
for($i=0; $i<1000; $i++){
    echo $i . "<br>";
    ob_flush(); // flush out the output as we go
    flush(); // same
    usleep(10000); // add some delay to see it in action  
}

?>

<script>
clearInterval(scroller); // stop updating so that you can scroll up 
</script>
于 2018-08-26T02:34:20.150 回答