• iframe内嵌网页自适应缩放 以展示源网页的比例尺寸


    需求:这是我最近开发的低代码平台遇到的需求 ,要求将配置好的应用在弹框中预览(将预览网页内嵌入弹框中) 但是内嵌进入后 他会截取一部分(我源网站网页尺寸 是1980x1080 或者 3060X2160等等)  但是我这个dialog弹框只有我自定义的1000多px的宽高 他只会展示我iframe网页的一部分

    需求描述清楚了 现在来说解决方法

    我们可以使用 iframe 的 @load方法 来控制iframe内嵌网页的缩放 以达到我们想实现的效果

    前提是必须要知道  1.内嵌网页的高宽!!!(一般都是一个展示列表 点击预览 写接口的时候可以将数据塞进数据列表中)     2.弹框的高宽(这个自己可以自定义)

    1. //html
    2. <el-dialog title="预览" id="preview-box" :visible.sync="previewObj.previewVisible" :close-on-click-modal=false
    3. :before-close="preViewHandleClose">
    4. <div class="title" slot="title" style="height: 20px;">
    5. <span>{{ previewObj.title }}</span>
    6. </div>
    7. <div class="bottom-content">
    8. <iframe :src="previewObj.urlValue" id="bi_iframe" frameborder="0" @load="adjustIframe"></iframe>
    9. </div>
    10. </el-dialog>
    11. //data
    12. previewObj: {
    13. //标题
    14. title: '',
    15. //控制弹框显示隐藏
    16. previewVisible: false,
    17. //iframe地址
    18. urlValue: null,
    19. //内嵌地址的宽高
    20. widthValue: 0,
    21. heightValue: 0,
    22. }
    23. //方法
    24. //1.点击预览方法
    25. // 预览 拿到需要的值
    26. lookFn(item) {
    27. this.previewObj.previewVisible = true
    28. this.previewObj.widthValue = item.width
    29. this.previewObj.heightValue = item.height
    30. this.previewObj.title = item.name
    31. var url = "windowPreview.html";
    32. var urlWithParams = url + "?appKey=" + encodeURIComponent(item.appkey) + "&appId=" + encodeURIComponent(item.id);
    33. this.previewObj.urlValue = urlWithParams
    34. }
    35. //2.
    36. //iframe load事件
    37. adjustIframe() {
    38. var iframe = document.getElementById('bi_iframe');
    39. // 获取父级容器的宽高 //也就是弹框在样式中设置的高宽 最好给固定值 在这里可以直接拿到
    40. var containerWidth = 1145;
    41. var containerHeight = 600;
    42. // 计算缩放比例
    43. var scaleWidth = containerWidth / this.previewObj.widthValue;
    44. var scaleHeight = containerHeight / this.previewObj.heightValue;
    45. var scale = Math.min(scaleWidth, scaleHeight); // 选择较小的缩放比例以保持宽高比
    46. // 应用缩放和定位
    47. iframe.style.transformOrigin = 'top left';
    48. iframe.style.transform = `scale(${scale}) translate(-50%, -50%)`;
    49. // 如果需要,可以调整iframe的宽高以匹配容器
    50. // 但由于我们使用了scale,所以通常不需要这样做
    51. iframe.style.width = `${this.previewObj.widthValue}px`;
    52. iframe.style.height = `${this.previewObj.heightValue}px`;
    53. },
    54. //样式
    55. <style lang="scss">
    56. #preview-box {
    57. .el-dialog {
    58. width: 1145px;
    59. }
    60. .el-dialog__body {
    61. padding: 0px;
    62. overflow: hidden;
    63. /* 隐藏超出容器的内容 */
    64. position: relative;
    65. /* 用于定位iframe */
    66. }
    67. .el-dialog__header {
    68. color: #fff;
    69. }
    70. }
    71. .bottom-content {
    72. width: 100%;
    73. height: 600px;
    74. position: relative;
    75. iframe {
    76. width: 100%;
    77. /* 初始宽度设置为100% */
    78. height: 100%;
    79. /* 初始高度设置为100% */
    80. border: none;
    81. position: absolute;
    82. top: 50%;
    83. left: 50%;
    84. /* 初始不应用缩放 */
    85. transform: none;
    86. transition: transform 0.3s ease;
    87. /* 可选的过渡效果 */
    88. }
    89. }
    90. </style>

    最后实现效果就是

    3840

    1920

     

  • 相关阅读:
    实战4 - 汽车行驶工况构建
    【基础知识】从FT到FFT
    【Flask】三、Flask 常见项目架构
    vue的学习与应用
    大数据时代,数据治理
    SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue三种队列的简单介绍
    【数据结构与算法】时间复杂度和空间复杂度
    Asp.Net Core6.0中MediatR的应用CQRS
    闭关之 C++ 并发编程笔记(二):同步、内存模型和原子操作
    Spring核心问题回顾3:spring的事务传播机制、事务失效的情况、对ioc的理解
  • 原文地址:https://blog.csdn.net/m0_65607651/article/details/139327017