当前位置:   article > 正文

页面ifream固定分辨率展示并适配所有分辨率方法

ifream

        实现方式:

        以ifream要完整展示1920*1080大屏为例:

        将ifream本身进行相对于1920*1080的等比例放大,然后再使用transform对ifream进行相对于1920*1080的等比例缩小,然后再将放缩之后的ifream进行平移至页面正中间,实现铺满整个屏幕。

        效果实现:

        虽然网页展示的只是一个ifream,但是还需要在该ifram外面再包一层父级div,

  1. <div className={styles.iframeDiv}>
  2. <iframe id="iframe12138" className={styles.iframe} src={url} frameBorder="0" />
  3. </div>

        css样式设置:

  1. .iframeDiv{
  2. width:100%;
  3. height:100%;
  4. display: flex;
  5. justify-content: center;
  6. align-items: center;
  7. position: relative;
  8. .iframe{
  9. position: absolute;
  10. top: 0;
  11. left: 0
  12. }
  13. .iframe::-webkit-scrollbar {
  14. display:none;
  15. }
  16. }

        此时展示效果是这样的:

        将ifream设置铺满整个屏幕需要用到css属性transform,通过transform设置ifream的放缩比例,然后通过transform下的translate对其进行相应的位移使其移到屏幕的正中间。但首先要对ifream进行等比例放大:

        思路:先获取当前屏幕的宽高,然后再以1920和1080分别除以当前宽高,然后乘上100就得到了ifream的相对于当前分辨率的放大比例。

  1. let width = (1920 / window.screen.width) * 100;
  2. let height= (1080/ window.screen.height) * 100;

        以736*414的iphone 6/7/8plus的分辨率为例,这样得到的放大倍数为:

        然后再对其进行相对于1920*1080的等比例缩小:

  1. let scaleX = window.screen.width / 1920;
  2. let scaleY = window.screen.height/ 1080;

        还是以以736*414的iphone 6/7/8plus的分辨率为例,此时缩小比例为:

        此时的效果为:

        由效果可知要将缩小后的ifream进行向上向左平移:

        实现这个效果用translate进行平移即可

  1. let translateX = -(((1920 / window.screen.width) * 100) / 2 - 50);
  2. let translateY = -(((1080/ window.screen.height) * 100) / 2 - 50);

        将上面所说的所有计算通过style对ifream进行样式设置可得:

  1. let width = (1920 / window.screen.width) * 100;
  2. let height= (1080/ window.screen.height) * 100;
  3. let scaleX = window.screen.width / 1920;
  4. let scaleY = window.screen.height/ 1080;
  5. let translateX = -(((1920 / window.screen.width) * 100) / 2 - 50);
  6. let translateY = -(((1080/ window.screen.height) * 100) / 2 - 50);
  7. <div className={styles.iframeDiv}>
  8. <iframe
  9. id="iframe12138"
  10. style={{
  11. width: `${width}%`,
  12. height: `${height}%`,
  13. transform:
  14. `scale(${scaleX},${scaleY})
  15. translate(${translateX}%,${translateY}%)`,
  16. }}
  17. className={styles.iframe}
  18. src={iframeData}
  19. frameBorder="0"
  20. />
  21. </div>

        也可以这样写:

  1. <div className={styles.iframeDiv}>
  2. <iframe
  3. id="iframe12138"
  4. style={{
  5. width: `${(1920 / window.screen.width) * 100}%`,
  6. height: `${(1080 / window.screen.height) * 100}%`,
  7. transform: `scale(${window.screen.width / 1920},${
  8. window.screen.height / 1080
  9. }) translate(${-(((1920 / window.screen.width) * 100) / 2 - 50)}%,${-(
  10. ((1080 / window.screen.height) * 100) / 2 -
  11. 50
  12. )}%)`,
  13. }}
  14. className={styles.iframe}
  15. src={iframeData}
  16. frameBorder="0"
  17. />
  18. </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。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/997572
推荐阅读
相关标签
  

闽ICP备14008679号