• 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

     

  • 相关阅读:
    ThreeJS-3D教学二基础形状展示
    python之函数的基本用法
    带你进入桌面数控机床金工实训室
    【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
    Zookeeper 怎么实现分布式锁
    前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS基础(五)
    共赴开源路,共筑新丰碑!2022云栖大会龙蜥操作系统峰会圆满落幕!
    内核学习——1、list_head
    neo4j4.0+与JDK11知识图谱安装与配置
    [网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法
  • 原文地址:https://blog.csdn.net/m0_65607651/article/details/139327017