如何在javascript中正确地将IFrame滚动到底
How to properly scroll IFrame to bottom in javascript
对于用于研究网站交互的模拟网页,我使用JavaScript创建了一个模拟消息流。此消息流加载在IFrame中,应以预设的间隔显示图像,并在页面底部放置新图像后滚动到页面底部。使用所提供的脚本可以很好地显示图像。然而,Chrome和IE似乎都很难将页面滚动到底。我想在附上图像后立即滚动到页面底部,但现在添加了5毫秒的延迟,因为这有时似乎有效。我的问题是:
- 可以使用document.body.scrollHeight吗
- 我可以直接滚动吗?还是在滚动之前需要一个小的间隔
- 如何在添加图像后直接将代码滚动到IFrame的底部
使用以下函数,并在加载时启动锥虫():
function scrollToBottom(){
window.scrollBy(0,document.body.scrollHeight);
}
function trypost(){
point = point + 1;
if(point < interval.length){
//create and append a new image
var newImg = document.createElement("IMG");
newImg.src = "images/"+images[point]+".png";
document.getElementById('holder').appendChild(newImg);
//create and append a return
var br = document.createElement("br");
document.getElementById('holder').appendChild(br);
//time scroll to bottom (after an arbitrary 5 seconds)
var stb = window.setTimeout(scrollToBottom, 5);
//time next post
var nextupdate = interval[point]*400;
var tp = window.setTimeout(trypost, nextupdate);
}
}
我的脚本部分至少包含以下变量:
var point = -1;
var interval = [10, 10, 15];
var images = ["r1", "a1", "r2"];
这个问题是"如何正确使用IE中的setTimeout?"中描述的项目的延续?
要回答您的一个问题,document.body.scrollHeight
适用于此目的,但如果您实际调用document
,则不适用。这将为您提供文档的滚动高度,iFrame是中的,而不是iFrame的文档。iFrame的文档可以由[insert variable for iFrame here].contentDocument
调用。
以下是我是如何做到的(我的意思是,我用自己的东西测试了它,以确保它有效):
let i = document.querySelector('iframe')
i.contentWindow.scrollTo(0, i.contentDocument.body.scrollHeight);
话虽如此,托马斯·厄本的另一个答案在大多数情况下也会奏效。区别在于,只有当您的页面具有非常长的滚动高度时。大多数页面都不会超过999999(据我所知,这是不可能的,这就是他们选择这个数字的原因),但如果你有一个页面比这个长,我在这里展示的方法会滚动到底部,999999会滚动到还不在底部的地方。
还要注意,如果你有多个iFrame,你会想用与我不同的方式来查询它,比如ID。
向下滚动总是像滚动到一些大得离谱的顶部偏移,例如999999
。
iframe.contentWindow.scrollTo( 0, 999999 );
此外,请参阅以下文章:使用javascript滚动iframe?
如果滚动发生得太早,可能是因为图像尚未加载。因此,您必须在加载添加的图像后立即滚动,而不是在放置图像时。添加
newImg.onload = function() { triggerScrolling(); };
在创建newImg
之后但在分配属性src
之前。
如果需要几个事件来触发滚动,您可能需要使用一些"事件收集器"。
function getEventCollector( start, trigger ) {
return function() {
if ( --start == 0 ) { trigger(); )
};
}
然后你可以这样使用它:
var collector = getEventCollector( 2, function() { triggerScrolling(); } );
newImg.onload = collector;
window.setTimeout( collector, 100 );
通过这种方式,triggerScrolling()
至少在100ms后调用,并且在为collector
加载图像后必须调用两次才能最终调用triggerScrolling()。
- 在firefox和chrome中的左侧显示iframe滚动条
- 使用浏览器滚动条而不是iframe滚动条
- 将IFrame滚动到顶部在Chrome中不起作用
- Iframe滚动溢出隐藏在css中不起作用
- 如何使父网页从 iframe 滚动到特定位置(顶部)
- Iframe 滚动条不在页面右侧
- 可以 jQuery invalidHandler 通过父窗口中的 iframe 滚动顶部
- 在Facebook iframe滚动条或页面中途剪切之间进行选择
- 如何在特定iframe滚动条的滚动条上调用适当的JavaScript方法
- 在javascript中反复切换iframe滚动条
- 如何自定义twitter iframe滚动条的样式
- 调整iframe滚动到屏幕分辨率的高度
- JQuery:如何连接事件到iFrame滚动
- 从iframe滚动到顶部
- 如何修改iframe滚动
- 在隐藏和显示Iframe元素后,Iframe滚动条不显示在chrome中
- 使iframe滚动条消失
- 在iframe滚动之前禁用复选框
- 如何在javascript中正确地将IFrame滚动到底
- Iframe滚动问题.解决方案是什么