我有一个可滚动的iframe。调用一个函数,该函数传递一个div(文本消息气泡)的ID来聚焦。它可以工作但是当关注项目时它总是出现在iframe的最顶端。因此,用户必须向上滚动一点才能看到用户正在回复的消息。我希望该功能能够专注于消息,但让它出现在iframe的正中心。我相信问题在于我试图使用......
iframe.contentWindow.location.hash
与......结合使用。
iframe.contentWindow.scrollTo(0,400);
我无法想到解决方案。我想是可以得到有问题的项目的y-coord和scrollTo
它的y-coord + iframe的高度的一半。但是还没有好运。这是一个可以玩的jsfiddle:http://jsfiddle.net/df09shon/3/
答案 0 :(得分:0)
这是一个使用Firefox的解决方案(我无法在Internet Explorer上测试): http://jsfiddle.net/df09shon/4/
我只是将 scrollTo()放在 window.setTimeout()中。在这种情况下,我肯定会在 location.hash 之后进行滚动。
window.setTimeout(
function() {
iframe.contentWindow.scrollTo(
0, iframe.contentWindow.scrollY - iframe.clientHeight / 2);
}
);
答案 1 :(得分:0)
尝试
function goToMsg(id){
var elem = iframe.contentWindow.document.getElementById(id);
iframe.contentWindow.location.hash = id;
$("html, body")
.animate({scrollTop:$( elem ).offset().top}, 250, function() {
$(elem).fadeIn(200).fadeOut(200).fadeIn(200)
.fadeOut(200).fadeIn(200).fadeOut(200).fadeIn(200)
.fadeOut(200).fadeIn(200);
})
//iframe.contentWindow.scrollTo(100,100);
}
jsfiddle http://jsfiddle.net/df09shon/6/
答案 2 :(得分:0)
我明白了。基本上我不得不取消iframe.contentWindow.location.hash
而只是抓住气泡的y-coord然后滚动到该位置减去iframe高度的一半。这是... http://jsfiddle.net/df09shon/8/
关键部分是......
var rect = elem.getBoundingClientRect();
//console.log(rect.top, rect.right, rect.bottom, rect.left);
iframe.contentWindow.scrollTo(0,rect.top-iframe.clientHeight / 2);