iframe高度自适应方案总结[亲测有效] -凯发k8官方旗舰厅

iframe高度自适应方案总结[亲测有效]1.背景iframe能将一个网页嵌入到另一个网页中,有个缺陷是高度不能随内容而撑开,需要手动设置。如果内容高度是动态的,就会存在问题。在网上查了不少方案都存在一些问题,总结了一下2.思路整体而言思路是:通过scrollheight获取iframe的滚动高度,动态将iframe.height设置为scrollheight即可但是要考虑到两个问题如果内容是动态改变的,就不能仅仅在window.onload后做一次高度改变要考虑撑开后又高度又缩小的情况3.代码为了解决上述的两个问题,

1. 背景

iframe能将一个网页嵌入到另一个网页中,有个缺陷是高度不能随内容而撑开,需要手动设置。

如果内容高度是动态的,就会存在问题。

在网上查了不少方案都存在一些问题,总结了一下

2. 思路

整体而言思路是:通过scrollheight获取iframe的滚动高度,动态将iframe.height设置为scrollheight即可

但是要考虑到两个问题

  1. 如果内容是动态改变的,就不能仅仅在window.onload后做一次高度改变
  2. 要考虑撑开后又高度又缩小的情况

3. 第一版代码

为了解决上述的两个问题,采用了以下办法(轮询)

  1. 不在window.onload后改变高度,而是跑定时器轮询,每隔一段时间执行。虽然有点笨笨的,但是目前我也没想到更好的方案
  2. 改变iframe.height之前先设为0
const resizeiframeheight = iframeel => { 
   
    const iframewindow = iframeel.contentwindow || iframeel.contentdocument.parentwindow
    if (iframewindow.document.body) { 
   
        const height = iframewindow.document.body.scrollheight
        iframeel.height = '0' // 先改为0,避免内容变小了,而高度还处于撑开的高度
        iframeel.height = height  'px'
    }
}
const timerid = setinterval(() => { 
   
    // 选中iframe
    const iframeel = document.queryselector('#iframe')
    resizeiframeheight(iframeel)
}, 200)
iframe高度自适应方案总结[亲测有效]

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活clion
datagrip dataspell
dotcover dotmemory
dottrace goland
phpstorm pycharm
resharper reshac
rider rubymine
webstorm 全家桶

4. 第二版代码

按上述代码修改后会存在bug,由于height一下变为0,一下变为scrollheight,会导致滚动条无法向下滑动。

后来转变了一下思路,不能通过scrollheight去设置高度,而是去获取iframe里面主容器的高度来设置

const resizeiframeheight = iframeel => { 
   
    const iframewindow = iframeel.contentwindow || iframeel.contentdocument.parentwindow
    if (iframewindow.document.body) { 
   
    	// 获取主容器高度,iframe内的div容器高度是会自己撑开的
        const height = iframewindow.document.queryselector('#app').offsetheight
        iframeel.height = height  'px'
    }
}
const timerid = setinterval(() => { 
   
    // 选中iframe
    const iframeel = document.queryselector('#iframe')
    resizeiframeheight(iframeel)
}, 200)
凯发k8官方旗舰厅的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/163260.html

(0)

相关推荐

  • 最简单的for循环_循环怎么写循环来源:juejin.im/post/5ea63f3ef265da47b177b4b6 几种遍历方法中for执行最快,它没有任何额外的函数调用栈和上下文。但在实际开发中我们要结合语义话、可读性和程序性能

  • php异常处理_什么是异常处理异常处理(exception)用于在指定的错误发生时改变脚本的正常流程。当异常被抛出时,其后的代码不会继续执行,php会尝试查找匹配的“catch”代码块。

  • php怎么将字符串转为浮点型数据_浮点数转化为字符串的函数php将字符串转为浮点型的方法:1、在字符串变量前加上用括号括起来的目标类型“(float)”、“(double)”或“(real)”,语法“(float)$str”;2、使用floatval()函数,语法“floatval($str)”。

  • js获取当前时间的年、月、日、时间等[通俗易懂]vardate=newdate();date.getyear();//获取当前年份(2位)date.getfullyear();//获取完整的年份(4位)date.getmonth();//获取当前月份(0-11,0代表1月)date.getdate();//获取当前日(1-31)date.getday();//获取当前星期x(0-6,0代表星期天)date.gettime();//获取当前时间(从1970.1.1开始的毫秒数)date.geth

  • 解决spring的java.lang.illegalargumentexception异常。最近搭建在eclipse中搭建spring环境,使用过junit测试了一个spring静态工厂实例化bean的例子,出现了java.lang.illegalargumentexception异常。 环境信息列表:系统平台:windowx64开发平台:eclipseee4.5 springversion:3.2jdk:1.8***************

    2022年11月18日
  • php增删改网页源代码_php实验报告运用php技术和mysql数据库实现对一个数据库表格的操作。实验环境1.dreamweavercs6软件2.phpstudy2018软件(包含web服务器apache、数据库服务器mysql、php语言引擎)实验内容安排1.选择学习或生活环境中的一个数据表格并构造符合sql格式的初始数据2.通过浏览器对这个数据表格进行查找、显示、修改、增添、删除5项操作…

  • java properties containskey_java properties containskey(value)用法及代码示例properties类的containskey(value)方法用于检查此properties对象是否包含此key的任何映射(对于其中存在的任何键)。它将此值作为参数进行比较,并返回一个布尔值作为结果。用法:publicobjectcontainskey(objectvalue)参数:此方法接受参数值,该参数值是要在此属性中搜索的键。返回值:此方法返回一个布尔值,该布尔值说明此键是否存在于此…

    2022年12月21日
  • pycharm企业版激活码【2022最新】2022.01.22「终于解决」(pycharm企业版激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏思创斯太难教程,2021永久激活的方法等着你。https://ispacesoft.com/ideaintellij2021…

发表回复

您的电子邮箱地址不会被公开。

联系凯发k8官方旗舰厅

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图