php ob_flush:如何使浏览器窗口/页面向下滚动输出?

时间:2013-06-03 15:30:10

标签: php javascript scroll flush

搜索了一下,但对此没有太多了解。

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

ob_implicit_flush(true);
ob_end_flush();

这很乐意将循环输出到我的浏览器窗口,但内容滚动到页面底部,我必须手动向下滚动。所以我的问题是:如何让页面或浏览器窗口滚动显示内容?

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

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

任何快速提示都会很棒。

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

无需添加数千行代码,只需在输出顶部添加一个简短函数,然后在末尾添加一行即可。可行(将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>