打开新窗口,滚动到元素

时间:2015-01-30 09:54:44

标签: javascript jquery internet-explorer backbone.js

我需要在加载dom后打开一个窗口,并将y位置滚动到元素,最好是在屏幕中心。我查看了堆栈溢出,并将一些东西与我找到的位置放在一起。

这个问题是它使用计时器来查看我的元素是否可用,而且它非常慢 - 改变间隔时间根本不会影响速度。此外,它在IE中不起作用,我需要它。想到这个?

    linkToComment: function(e){
        var link = 'https://****';
        var commentId = 21

        var w = window.open(link);          
        var interval = setInterval(function(){
            if ( $(w.document.body).find("div[data-commentoriginalid=" + commentId + "]")) {
              $(w.document.body).animate({
                  scrollTop: ( $(w.document.body).find("div[data-commentoriginalid=" + commentId + "]").offset().top)
              },500);
              clearInterval(interval);
            }
        }, 500)



    },

2 个答案:

答案 0 :(得分:0)

尝试此而不是间隔:

 $(w.document).ready(function () {
     $(w.document.body).animate({
       scrollTop: ( $(w.document.body).find("div[data-commentoriginalid=" + commentId + "]").offset().top)
     },500);
 });

但我不明白你为什么要从父窗口进行滚动,而不是将javascript添加到打开的窗口......

答案 1 :(得分:0)

您是否可以访问子窗口中的代码/源代码?如果我这样做,我会在子窗口中添加一个onload处理程序,而不是试图从父窗口控制它。如果需要将变量传递给父项中的子项,则可以使用查询字符串或哈希参数。

e.g。 mysite.com#2345

然后在子窗口中选择该id,选择具有该ID的元素并滚动到它。

请记住 - 当子窗口打开时,用户可以关闭父窗口,这意味着计时器将被终止。