2024国产成人精品免费视频|日本免费一区二区三区毛片|久久97超碰色中文字幕|亚洲天堂a中文字幕

layui.layer實現(xiàn)iframe高度尺寸自動自適應(yīng)解決方案

2022-03-01 23:16 欄目:技術(shù)開發(fā) 查看(19772)

最近微構(gòu)網(wǎng)絡(luò)在為長沙某單位進行網(wǎng)站開發(fā)的時候,用到了layui的layer組件,而且按照需求,項目不少位置需要使用iframe彈出。在layui框架的layer組件,是可以支持彈窗尺寸的自動的,也就是寬度和高度都可以自動。文檔中有這樣的介紹:

在默認(rèn)狀態(tài)下,layer是寬高都自適應(yīng)的,但當(dāng)你只想定義寬度時,你可以area: ’500px’,高度仍然是自適應(yīng)的。當(dāng)你寬高都要定義時,你可以area: ['500px', '300px']

微信截圖_20220301223043

但由于layui默認(rèn)使用的尺寸單位是px,如果僅僅是設(shè)置area的值為auto的話,實現(xiàn)的效果跟我們想得到的效果是有所偏差的??梢钥吹絠frame的高度并不如我們所需要的“自適應(yīng)”,而是出現(xiàn)了滾動條。如下圖:

1

由于這個彈窗內(nèi)容高度很低,可能屏幕的三分之一以內(nèi),這個時候預(yù)期結(jié)果應(yīng)該是需要直接展示iframe框架內(nèi)的所有的內(nèi)容,并且是沒有滾動條的??梢赃M一步看到動態(tài)加載后的html數(shù)據(jù)如下:

微信截圖_20220301223742

我們可以看到雖然layui-layer-iframe元素的尺寸根據(jù)我們之前設(shè)定的area值為auto,寬高都為auto。然而iframe的高卻是一個固定值,并不能根據(jù)內(nèi)容自適應(yīng)。如果把area設(shè)定為固定值,可以解決這個問題,然而會出現(xiàn)兩個問題,導(dǎo)致實現(xiàn)效果非常不優(yōu)雅。

1、一個項目中可能有許多地方需要用到iframe,而且每個彈出的iframe高度肯定是不一定一樣的,這樣得每次調(diào)用的時候都設(shè)置尺寸,這樣太麻煩了,維護起來也很麻煩。

2、即便只有項目只有一個iframe或者不怕麻煩,然而在移動端我們用的元素尺寸是相對尺寸,不再是固定的px,而是根據(jù)設(shè)備屏幕大小自適應(yīng)的。

因此,如果能在調(diào)用layer的時候就可以自動計算iframe的高度,然后把這個值代入area,或許就可以解決這個問題。首先我們要知道的我們的目標(biāo)是獲取area[height]的值,也就是iframe的高度值?;具壿媱t是:

area[height]=layer標(biāo)題高度+iframe高度+btn高度

而上面截圖的layer并沒有btn,因此基本邏輯則是:

area[height]=layer標(biāo)題高度+iframe高度

當(dāng)然如果有btn則根據(jù)下面解決方案進行適當(dāng)微調(diào)即可,主要是思路。用到的突破點就是layer提供了彈出后的函數(shù)回調(diào)參數(shù)success,官方文檔描述如下:

2

因此我們就可以得到如下代碼:

success: function(res) {
   var iframe = $(res).find('iframe');
   var titleHeight=$(res).find('.layui-layer-title').height();//標(biāo)題高度
   var iframeHeight=iframe[0].contentDocument.body.scrollHeight;//iframe高度
   var height=iframeHeight+titleHeight;
   $(res).css('height', height);//重定義layer彈出高度
   iframe.css('height', iframeHeight);//重定義iframe高度
}

但這樣也會存在另外一個問題,就是如果iframe的高度很高,比如iframe里面是外聯(lián)了一篇文章內(nèi)容,很可能超過一屏,內(nèi)容甚至是數(shù)屏。這樣如果僅僅是上面的邏輯肯定會出問題的,也就是這個彈窗會被撐出去,這個時候就需要限制一個最大高度。假設(shè),我們限制layer的最大高度是當(dāng)前窗口高度的85%,那么我們可以根據(jù)上面的height的值跟窗口高度值比較即可來做區(qū)分處理。如下所示:

success: function(res) {
   var iframe = $(res).find('iframe');
   var titleHeight=$(res).find('.layui-layer-title').height();
   var iframeHeight=iframe[0].contentDocument.body.scrollHeight;
   var height=iframeHeight+titleHeight;
   if(window.innerHeight*0.85>height) {
      $(res).css('height', height);
      iframe.css('height', iframeHeight);
   }else{
      $(res).css('height', '85%');
      iframeHeight=$(res).height()-titleHeight;
      iframe.css('height', iframeHeight);
   }
}

也就是當(dāng)layer的高度(iframe高度+標(biāo)題高度)大于等于窗口高度的85%的時候,設(shè)定layer的高度是窗口的85%,iframe的高度則在此基礎(chǔ)上減去標(biāo)題區(qū)域的高度。最后實現(xiàn)的效果如下(無需每次調(diào)用layer時設(shè)置尺寸,尺寸自動自適應(yīng)):

3

高度很小的iframe彈窗

4

高度中等的iframe彈窗

5

高度超過窗口高度85%的iframe彈窗(出現(xiàn)內(nèi)部滾動條)

本次分享到此結(jié)束,當(dāng)然實際運用到項目中大家可能需要根據(jù)自己實際情況進行調(diào)整優(yōu)化,當(dāng)然這個思路對于非layui,自行使用iframe也是適用的。

與我們的項目經(jīng)理聯(lián)系
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請注明出處:layui.layer實現(xiàn)iframe高度尺寸自動自適應(yīng)解決方案 - 微構(gòu)網(wǎng)絡(luò)
分享:
长顺县| 百色市| 乐平市| 金昌市| 盐源县| 全州县| 抚顺县| 巴马| 长汀县| 雷波县| 松潘县| 思南县| 奉新县| 外汇| 高陵县| 宜良县| 肥西县| 南郑县| 蚌埠市| 英吉沙县| 西充县| 蓝山县| 长顺县| 岳普湖县| 青浦区| 林甸县| 井研县| 阿拉善左旗| 尖扎县| 甘德县| 宜昌市| 凌海市| 大安市| 禄丰县| 大化| 汝州市| 汾西县| 南靖县| 赤城县| 英超| 三穗县|