(轉)讓iframe自適應高度-真正解決


轉自:來源https://www.cnblogs.com/rogge7/p/7762052.html

需求:實現 iframe 的自適應高度,能夠隨着頁面的長度自動的適應以免除頁面和 iframe 同時出現滾動條的現象。 (需要只有iframe出現滾動條)

本人一開始這么寫:會造成只有主頁面加載是設定一次。但是窗體變小或變大后不會觸發。

復制代碼
 $(function setIframeHeight() {
        var iframe ;//高度初始化600,為了14寸筆記本
        iframe =document.getElementById('mainiframe');
        iframe.height=document.getElementById("sidebar").offsetHeight-56;

//        if (iframe) {
//            var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;
//            if (iframeWin.document.body) {
//                iframe.height = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight;
//            }
//        }
    })
復制代碼

轉:真正的讓iframe自適應高度 兼容多種瀏覽器隨着窗口大小改變 - CSDN博客--摘錄在下方
http://blog.csdn.net/alex8046/article/details/51456131

今天有朋友問到我關於“iframe自適應高度”的問題,原本以為是很簡單的問題,沒想到折騰了20分鍾才搞定。期間遇到幾個問題,要么是高度自適應了,但是當窗口改變時會出現滾動條。也就是當窗口放大時iframe沒有自動跟隨變大顯得很小,或是當窗口縮小時iframe還是之前那么大就出現了滾動條。還有或是高度不准確,那么就達不到想要的效果了。

為什么需要使用iframe自適應高度呢?其實就是為了美觀,要不然iframe和窗口長短大小不一,看起來總是不那么舒服,特別是對於我們這些編程的來說,如鯁在喉的感覺。

首先設置樣式

body{margin:0; padding:0;}

如果不設置body的margin和padding為0的話,頁面上下左右會出現空白。

html代碼如下

<iframe src="http://www.fulibac.com" id="myiframe" scrolling="no" frameborder="0"></iframe>

下面就是今天小編寫的時候遇到的問題,考慮到有些朋友可能沒怎么用jquery就直接用js吧。

方法一

var ifm= document.getElementById("myiframe");

ifm.height=document.documentElement.clientHeight;

這個方法可以達到讓iframe自適應高度的效果,但是如果你將窗口放大或縮小效果就不出來了,也就是本文開頭講的。需要再次刷新,那就不屬於自適應了。

那么問題來了,需要解決當窗口改變大小的時候執行js事件,以讓iframe自適就高度。那么就需要將相關的代碼寫成函數,並且給iframe加上onLoad="changeFrameHeight()",也就是下面的方法二了。

方法二

<iframe src="http://www.fulibac.com" id="myiframe" scrolling="no" onload="changeFrameHeight()" frameborder="0"></iframe>

js代碼也得跟着改

function changeFrameHeight(){
    var ifm= document.getElementById("iframepage"); 
    ifm.height=document.documentElement.clientHeight;

}

window.onresize=function(){  
     changeFrameHeight();  

window.onresize的作用就是當窗口大小改變的時候會觸發這個事件。

所以,使用方法二就可以完美的、真正的讓iframe自適應高度了,試試看吧,並且兼容多種瀏覽器。

==上面摘錄結束

 

====本人修改為:(方法1)

<iframe id="mainiframe" width="100%" height="600" src="/dsdd/confirm/" onload="changeFrameHeight()" frameborder="0" scrolling="auto"></iframe>
復制代碼
    function changeFrameHeight(){
        var ifm= document.getElementById("mainiframe");
        ifm.height=document.documentElement.clientHeight-56; //56是頭頂的高度,和網友估計不一樣。
    }
    $(function(){ window.onresize=function(){
            changeFrameHeight(); }}); //這里不知道是否還要 $(function(){}) 這個閉包嗎?后證實不需要
復制代碼

 但要保留  window.onresize=function(){ changeFrameHeight();}

==本人 方法2  html去掉每次iframe onload都觸發計算高度,更妙 ;推薦

 <iframe id="mainiframe" width="100%" height="600" src="/dsdd/confirm/"  frameborder="0" scrolling="auto"></iframe>
復制代碼
  function changeFrameHeight(){
        var ifm= document.getElementById("mainiframe");
        ifm.height=document.documentElement.clientHeight-56;
    }
    window.onresize=function(){ changeFrameHeight();}
    $(function(){changeFrameHeight();});
復制代碼

特別聲明: changeFrameHeight() 方法里面的計算高度要結合你的布局,並不是網上都合適你的。並且這個只有一個iframe

比如:下面的里面有很多方法,有點頭暈。^_^

關於iframe自適應高度的方法總結 - CSDN博客
http://blog.csdn.net/hj7jay/article/details/51675692

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM