javascript 使用主窗口滚动条滚动iframe的内容

tez616oj  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(230)

下面是我正在使用的示例页面:
https://www.midstory.org/toledos-water-issue-is-an-affordability-issue-too/
我有一个内嵌了故事Map文章的iframe在我们的WordPress站点上。故事Map文章是为了看起来与网站的其他部分无缝,填充整个视口和滚动,就像它是主页面的一部分。问题是,正如你在链接中看到的,在右边有两个滚动条。因为在嵌入的文章下面我们有评论框和网站页脚,其需要能够在用户到达嵌入文章的底部之后滚动到。
目前的解决方案“工作”,但看起来相当笨拙。有没有办法用主滚动条滚动iframe文章,然后让它滚动主页的其余部分,一旦到达嵌入文章的底部?
我的一个想法是把嵌入窗口固定在 windows 中,把主条目做成嵌入窗口的高度,这样就可以滚动页面了,但是有两个问题:
1.如何获得嵌入物品的高度?
1.如何控制嵌入文章从主文章的滚动位置?

vh0rcniy

vh0rcniy1#

有几种方法可以使嵌入的故事Map文章与页面的其余部分融为一体,同时只需要一个滚动条。

CSS方式

一种方法是将iframe的overflow属性设置为hidden,然后使用position属性将iframe绝对定位在容器元素中。要在容器中启用滚动,应指定容器元素具有固定的高度和宽度,以及overflow-y:滚动。

.container {
    position: relative;
    width: 100%;
    height: 100vh;
    overflow-y: scroll;
}

iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

看起来是最简单的,然而,它可能不像其他JS实现那样可靠。

JS计算:

一种方法是使用JavaScript/jQuery监听主页上的滚动事件,然后根据主页的滚动位置更改iframe的滚动位置,可以使用window.scrollY属性获取主页的当前滚动位置,然后使用contentWindow.scrollTo()方法设置iframe的滚动位置。
但是,这种方法需要提前知道嵌入项的高度,这是您在查询中突出显示的问题之一。

使用JS库(https://github.com/davidjbradshaw/iframe-resizer

一个更好的解决方案可能是利用iframe-resizer这样的iframe大小调整器库,它允许根据内容大小调整iframe的大小,还允许父页面控制iframe的滚动位置。
iframe大小调整器库可用于自动将iframe调整为内容的大小,以及监听父页面上的滚动事件并更改iframe的滚动位置。
您还可以传递其他选项,例如heightCalculationMethod,以设置库应如何计算iframe的高度,并将scrolling设置为true,以允许父页面控制iframe的滚动位置。
希望这能有所帮助!

相关问题