JQuery iframe宽高度自适应浏览器窗口大小的解决方法
iframe宽高度自适应浏览器窗口大小的解决方法
by:授客 QQ:1033553122
- 1. 测试环境
JQuery-3.2.1.min.js
下载地址:
https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js
Bootstrap-3.3.7-dist
下载地址:
https://gitee.com/ishouke/front_end_plugin/blob/master/bootstrap-3.3.7.zip
win7
- 2. 需求场景1
实现需求:如下图,点击左侧的导航,打开对应tab页面,其中tab页面的内容为 iframe,这里希望iframe的高度和宽度,根据浏览器窗口大小变化而变化,同时页面内容过多,或者过宽时,出现iframe滚动条,其所在父页面不出现滚动条。


- 3. HTML代码片段
iframe页面所在父页面代码片段
<!DOCTYPE html>
略...
<body style="overflow: hidden;">
略...
说明:
这里设置style="overflow: hidden;" 作用在于隐藏父页面的滚动条;
添加<!DOCTYPE html>文档类型声明,避免相关高度属性可能取不到值的情况
iframe代码片段1
<div id="tabContent" class="tab-content">
<!--通过js获取 tab对应的页面内容-->
<div id="tab-content-80" role="tabpanel" class="tab-pane">
<iframe name="tabIframe" id="ifm80" src="/platform/page/resourceSetting.html" width="100%" frameborder="no"
border="0"
marginwidth="0"
marginheight="0"
scrolling="yes"
allowtransparency="yes"
onload="changeFrameHeight()">
</iframe>
</div>
<div id="tab-content-117" role="tabpanel" class="tab-pane active">
<iframe name="tabIframe" id="ifm117" src="/platform/page/roleSetting.html" width="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="yes" allowtransparency="yes" onload="changeFrameHeight()">
</iframe>
</div>
</div>
说明:
scrolling="auto" 设置用于自动判断是否出现滚动条。
width="100%" 设置用于控制iframe页面宽度根据浏览器宽度变化而变化
iframe代码片段2
基本同“iframe代码片段1”,只是给changeFrameHeight函数增加iframeID参数
<iframe name="tabIframe" id="ifm117" src="/platform/page/roleSetting.html" width="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="yes" allowtransparency="yes" onload="changeFrameHeight('ifm117')">
</iframe>
JS代码片段1(批量更改所有tab页的iframe高度)
/**
* 设置tab标签对应的iframe页面高度
*/
function changeFrameHeight(){
var iframes = document.getElementsByName('tabIframe');
var contentContainer = $('#' + tabContentID); // 获取tab标签对应的页面div容器对象 // 可能会出现获取不到的情况
if (contentContainer.offset()) {
offsetTop = contentContainer.offset().top; //容器距离document顶部的距离
}
$.each(iframes, function(index, iframe){
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
iframe.height = h - offsetTop; // 这里 offsetTop可以替换成一个比较合理的常量值
});
}
说明:
window.innerHeight 获取浏览器窗口的高度-去掉浏览器地址栏,书签栏的可视区域的高度,包括横向滚动条的高度。
document.documentElement.clientHeight - 获取文档html根节点的高度,不包括横向滚动条的高度,其值等于window.innerHeight - 横向滚动条高度(如果有的话),否则等于window.innerHeight
document.body.clientHeight 获取body节点的的高度,不包括横向滚动条的高度。实践中发现document.body.clientHeight略大于document.documentElement.clientHeight和window.innerHeight 5px。
/**
* 浏览器窗口大小发生变化时,自动调整iframe页面高度
* 浏览器等因素导致改变浏览器窗口大小时,会发生多次resize事件,导致频繁调用changeFrameHeight()
*/
$(function(){
var resizeTimer = null;
window.onresize=function(){
if (resizeTimer) {
clearTimeout(resizeTimer); // 取消上次的延迟事件
}
resizeTimer = setTimeout('changeFrameHeight()', 500); // //延迟500毫秒执行 changeFrameHeight方法
}
});
说明:
window.onresize=“resize事件发生时执行的 JavaScript”,以上代码也可以使用JQuery的$(window).resize(function)等效实现。
当调整浏览器窗口的大小时,发生 resize 事件。 $(window).resize(function)指定了当发生 resize 事件时运行的函数function
$(window).resize(function(){
var resizeTimer = null;
if (resizeTimer) {
clearTimeout(resizeTimer); // 取消上次的延迟事件
}
resizeTimer = setTimeout('changeFrameHeight()', 500); // //延迟500毫秒执行 changeFrameHeight方法
});
js片段代码2(只更新当前tab页的iframe高度)
/**
* 设置tab标签对应的iframe页面高度
*/
function changeFrameHeight(ifmID){
var contentContainer = $('#' + tabContentID); // 获取tab标签对应的页面div容器对象 // 可能会出现获取不到的情况
var offsetTop = 0;
if (contentContainer.offset()) {
offsetTop = contentContainer.offset().top; //容器距离document顶部的距离
}
var ifm = document.getElementById(ifmID);
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
ifm.height = h - offsetTop; // 这里 offsetTop可以替换成一个比较合理的常量值
}
$(function(){
window.onresize=function(){
var resizeTimer = null;
if (resizeTimer) {
clearTimeout(resizeTimer); // 取消上次的延迟事件
}
var li_active = $("#"+ tabFatherElementID + " > li.active");
if (li_active.text().length) {
var iframeID = 'ifm' + li_active.attr('id').replace('tab-li-', '');
resizeTimer = setTimeout('changeFrameHeight("'+iframeID+'")', 500); // //延迟500毫秒执行 changeFrameHeight方法
}
}
});
- 4. 参考链接
http://www.runoob.com/js/js-window.html
https://www.w3cplus.com/javascript/offset-scroll-client.html
https://www.imooc.com/qadetail/109244?t=103342
http://www.w3school.com.cn/jquery/event_resize.asp
http://www.w3school.com.cn/jsref/event_onresize.asp
JQuery iframe宽高度自适应浏览器窗口大小的解决方法的更多相关文章
- iframe的高度自适应
http://www.cnblogs.com/snandy/p/3902337.html http://www.cnblogs.com/snandy/p/3900016.html Snandy Sto ...
- 同域iframe的高度自适应
引子 父页面里控制子页面 子页面里控制父页面 一.引子 我们先看一个示例,有两个页面,1.html通过iframe嵌入2.html,两个页面都是同域的 1.html <!DOCTYPE html ...
- ExtJS6 自适应浏览器窗口大小
ExtJS6官方文档推荐使用Ext.on.做一个小例子,创建一个Panel显示在页面上,使它的大小随浏览器变化,自适应浏览器窗口大小. html:增加一个css样式给Panel加上红色border. ...
- 跨域iframe的高度自适应
If you cannot hear the sound of the genuine in you, you will all of your life spend your days on the ...
- div中宽高度自适应文字换行居中问题解决
<html> <head> <meta charset="UTF-8"/> <title>div中宽高度自适应文字换行居中demo& ...
- extjs folder is lost解决方法 和 FineUI主题切换时 iframe内的内容主题不变的解决方法
错误原因:extjs包和FineUI版本不一致 或者是 webconfig配置中 没有设置为任何人可访问 解放方法下载和FineUI版本相同的extjs包就ok了 解决方法:FineUI主题切换时 ...
- jquery报.live() is not a function的解决方法
jquery报.live() is not a function的解决方法: jquery中的live()方法在jquery1.9及以上的版本中已被废弃了,如果使用,会抛出TypeError: $(. ...
- js获取iframe和父级之间元素,方法、属,获取iframe的高度自适应iframe高度
摘自:http://blog.csdn.net/kongjiea/article/details/38870399 1.在父页面 获取iframe子页面的元素 (在同域的情况下 且在http://下测 ...
- jQuery easyui layout布局自适应浏览器大小(转)
首先解释一下标题的含义,当我们用jQuery easyui layout 进行布局的时候,可能会遇到这样一个问题,那就是当手工调整浏览器大小,或者最大化.还原窗口的时候,layout的某个区域不能填充 ...
随机推荐
- 解决在IE11浏览器下,JQuery的AJAX方法不响应问题
在项目的时候一直都是在使用谷歌浏览器在调试,后来在现场部署到服务器上的时候,客户使用的是IE浏览器,版本是11 在测试的过程中,出现几个问题,虽然是几个问题,但是问题的原因就是AJAX第一次响应,第二 ...
- Android 插件化开发(二):加载外部Dex文件
在学习Java反射的技术后,我们可以开始更深一步的探究插件化开发了.首先先讲一下Android App的打包流程,然后我们通过一个简单的例子 —— 实现插件化加载外部Dex来完成初级的插件化开发的探索 ...
- 63-容器在 Weave 中如何通信和隔离?
上一节我们分析了 Weave 的网络结构,今天讨论 Weave 的连通和隔离特性. 首先在host2 执行如下命令: weave launch 192.168.0.44 这里必须指定 host1 的 ...
- JavaWeb 实现简单登录、注册功能
1.首先创建一个简单的动态Javaweb项目 2.然后手动建立文件目录: 项目创建好之后,在src下建几个包: controller:控制器,负责转发请求,对请求进行处理,主要存放servlet: d ...
- NLP之语言模型
参考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA http://yangminz.coding.me/blog/post/MinkolovRN ...
- ts--泛型
//泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性,组件不仅要能支持当前的数据类型,同时也能支持未来的数据类型 //泛型就是解决 类 接口 方法的复用性 以及对不特定 ...
- 通过requestAnimationFrame判断浏览器帧率
/** ** 得到浏览器每秒帧数fps ** ** @Date Mar 13 2013 **/ var showFPS = (function(){ var requestAnimationFrame ...
- linux查看磁盘及文件夹大小命令
https://www.runoob.com/w3cnote/linux-view-disk-space.html 1.使用lsof查看已删除但未释放的文件 lsof -n | grep delete ...
- RabbitMQ 在.Net 中的使用
RabbitMQHelper public static class RabbitMQHelper { // 定义 RabbitMQ 基本参数 private static string HostNa ...
- centos7上安装jdk1.8
我这里是使用的jdk1.8:由于vmware上的字体太小,所以我使用xShell链接linux系统进行操作的. 准备工作:使用xftp链接linux系统:然后创建个包将linux版本的jdk上传上去: ...