赞
踩
以ifream要完整展示1920*1080大屏为例:
将ifream本身进行相对于1920*1080的等比例放大,然后再使用transform对ifream进行相对于1920*1080的等比例缩小,然后再将放缩之后的ifream进行平移至页面正中间,实现铺满整个屏幕。
虽然网页展示的只是一个ifream,但是还需要在该ifram外面再包一层父级div,
- <div className={styles.iframeDiv}>
- <iframe id="iframe12138" className={styles.iframe} src={url} frameBorder="0" />
- </div>
css样式设置:
- .iframeDiv{
- width:100%;
- height:100%;
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
- .iframe{
- position: absolute;
- top: 0;
- left: 0
- }
- .iframe::-webkit-scrollbar {
- display:none;
- }
- }

此时展示效果是这样的:
将ifream设置铺满整个屏幕需要用到css属性transform,通过transform设置ifream的放缩比例,然后通过transform下的translate对其进行相应的位移使其移到屏幕的正中间。但首先要对ifream进行等比例放大:
思路:先获取当前屏幕的宽高,然后再以1920和1080分别除以当前宽高,然后乘上100就得到了ifream的相对于当前分辨率的放大比例。
- let width = (1920 / window.screen.width) * 100;
- let height= (1080/ window.screen.height) * 100;
以736*414的iphone 6/7/8plus的分辨率为例,这样得到的放大倍数为:
然后再对其进行相对于1920*1080的等比例缩小:
- let scaleX = window.screen.width / 1920;
- let scaleY = window.screen.height/ 1080;
还是以以736*414的iphone 6/7/8plus的分辨率为例,此时缩小比例为:
此时的效果为:
由效果可知要将缩小后的ifream进行向上向左平移:
实现这个效果用translate进行平移即可
- let translateX = -(((1920 / window.screen.width) * 100) / 2 - 50);
- let translateY = -(((1080/ window.screen.height) * 100) / 2 - 50);
将上面所说的所有计算通过style对ifream进行样式设置可得:
- let width = (1920 / window.screen.width) * 100;
- let height= (1080/ window.screen.height) * 100;
- let scaleX = window.screen.width / 1920;
- let scaleY = window.screen.height/ 1080;
- let translateX = -(((1920 / window.screen.width) * 100) / 2 - 50);
- let translateY = -(((1080/ window.screen.height) * 100) / 2 - 50);
-
- <div className={styles.iframeDiv}>
- <iframe
- id="iframe12138"
- style={{
- width: `${width}%`,
- height: `${height}%`,
- transform:
- `scale(${scaleX},${scaleY})
- translate(${translateX}%,${translateY}%)`,
- }}
- className={styles.iframe}
- src={iframeData}
- frameBorder="0"
- />
- </div>

也可以这样写:
- <div className={styles.iframeDiv}>
- <iframe
- id="iframe12138"
- style={{
- width: `${(1920 / window.screen.width) * 100}%`,
- height: `${(1080 / window.screen.height) * 100}%`,
- transform: `scale(${window.screen.width / 1920},${
- window.screen.height / 1080
- }) translate(${-(((1920 / window.screen.width) * 100) / 2 - 50)}%,${-(
- ((1080 / window.screen.height) * 100) / 2 -
- 50
- )}%)`,
- }}
- className={styles.iframe}
- src={iframeData}
- frameBorder="0"
- />
- </div>

效果:
本方法的实现的思路逻辑为将ifream进行相对于当前分辨率下进行放大,就比如ifream需要固定展示1920*1080分辨率下的展示效果,但是当前分辨率只有768*414,就对ifream进行放大,使其放大后的宽高为1920*1080。此时再用scale进行放缩处理,放缩并不会改变分辨率,放缩倍数为1920*1080缩小到768*414的倍率,缩小后再计算平移量,通过translate进行平移到页面正中心。本方法的难点就是在于放大倍数的计算,缩小倍数的计算还有平移量的计算。该方法不仅仅适用于固定展示1920*1080,其他任何分辨率都可以适用,就比如说需要ifream固定展示1600*900或者1366*168都可以适用该方法,就是需要将计算式中的1920*1080替换成需要固定的分辨率的宽高即可。
手机端展示效果:
ipad端展示效果:
1920*1080分辨率下展示效果:
可以看到在使用这个算法之后无论是哪个分辨率下,展示效果都与1920*1080展示效果相同。
手机端:
ipad端:
pc端1920*1080:
可以看到当使用该算法来计算ifream的高度的时候,无论怎样变换分辨率,ifream的展示形式一直维持在1920*1080。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。