JQuery iframe宽高度自适应浏览器窗口大小的解决方法

摘要:
iframewidth-height自适应浏览器窗口大小的解决方案:GrantQQ:1033531221.测试环境JQuery-3.2.1.min.js下载地址:https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.jsBootstrap-3.7-dist下载地址:https://gitee.com/ishouke

iframe宽高度自适应浏览器窗口大小的解决方法

 

by:授客 QQ1033553122

  1. 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

 

  1. 2.   需求场景1

 

实现需求:如下图,点击左侧的导航,打开对应tab页面,其中tab页面的内容为 iframe,这里希望iframe的高度和宽度,根据浏览器窗口大小变化而变化,同时页面内容过多,或者过宽时,出现iframe滚动条,其所在父页面不出现滚动条。

JQuery iframe宽高度自适应浏览器窗口大小的解决方法第1张

 

 

 

JQuery iframe宽高度自适应浏览器窗口大小的解决方法第2张

 

  

 

 

  1. 3.   HTML代码片段

iframe页面所在父页面代码片段

<!DOCTYPE html>

略...

<body style="overflow: hidden;">

略... 

说明:

这里设置  作用在于隐藏父页面的滚动条;

添加<!DOCTYPE html>文档类型声明,避免相关高度属性可能取不到值的情况

 

iframe代码片段1

<div class="tab-content">

    <!--通过js获取 tab对应的页面内容-->

    <div role="tabpanel" class="tab-pane">

        <iframe name="tabIframe" src="http://t.zoukankan.com/platform/page/resourceSetting.html" width="100%"   frameborder="no"

                border="0"

                marginwidth="0"

                marginheight="0"

                scrolling="yes"

                allowtransparency="yes"

                onload="changeFrameHeight()">

        </iframe>

    </div>

    <div role="tabpanel" class="tab-pane active">

        <iframe name="tabIframe" src="http://t.zoukankan.com/platform/page/roleSetting.html" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="yes" allowtransparency="yes" onload="changeFrameHeight()">

        </iframe>

    </div>

</div>

 

说明:

scrolling="auto" 设置用于自动判断是否出现滚动条。

设置用于控制iframe页面宽度根据浏览器宽度变化而变化

 

iframe代码片段2

基本同“iframe代码片段1”,只是给changeFrameHeight函数增加iframeID参数

        <iframe name="tabIframe"   src="http://t.zoukankan.com/platform/page/roleSetting.html"   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.clientHeightwindow.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方法

        }

    }

});

 

 
  1. 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宽高度自适应浏览器窗口大小的解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql-xtrabackup备份sh: xtrabackup_56: command not found与error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directorycss实现五颜六色的按钮导航下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

广告嵌套document.write的非iframe方式的延迟加载无解嘛

用ControlJS优化阿里妈妈广告http://ued.taobao.com/blog/2011/03/controljs-alimama/让document.write的广告无阻塞的加载http://stylechen.com/rewrite-documentwrite.htmlDomWriter:延迟调用含有document.write的外部JS脚本...

jquery----语法扩展(导入js文件)

简单使用 第一步,新建js文件 第二步,在js文件中添加 $.extend({ "GDP": function () { console.log("哈哈哈哈"); } }); 第三步,在html中使用   $.GDP()  即可 复杂(1,希望一些函数不可以被外部引用,不可以被修改$) (functi...

兼容各浏览器的iframe方法

方法一:(推荐1) <iframe src="http://t.zoukankan.com/Home/CreateGroup?classID=@ViewBag.ClassID" scrolling="no" frameborder="0" width="82%"></iframe><script type="text/java...

页面嵌套 Iframe 产生缓存导致页面数据不刷新问题

  最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息。   初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳。这样能确保每次在加载页面时,让浏览器知道它是最新的页面。说白了就是欺骗下浏览器,躲过缓存的灾难。(这是从 Stack Overflow 和 CSDN 上找到...

jQuery boxy弹出层对话框插件中文演示及讲解

一、前言jQuery 下的boxy可以说是一个非常实用的插件,尤其在SNS社区型的大型网站上经常见到风格类似的效果,例如开心网,人人网,facebook网站。这个提示对话框插件应用非常广泛,吃透这个jQuery插件,在灵活运用Ajax技术的话,会使网站无论技术还是体验都会有很大的提升的。具体来讲此jQuery插件包括:提示、确认,拖拉、改变大小、Ajax...

使用jquery实现文本框输入特效:文字逐个显示逐个消失反复循环

        前两天看到某个网站上的输入框有个小特效:文字逐个显示,并且到字符串最大长度后,逐个消失,然后重新循环显示消失,循环显示字符串数组。我对这个小特效有点好奇,于是今天自己尝试用jquery写一个简单的小demo,终于把效果整出来了。首先看一下实现后的效果: 接下来上代码。 <!DOCTYPE html> <html lan...