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

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

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

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

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

//html
    <el-dialog title="预览" id="preview-box" :visible.sync="previewObj.previewVisible" :close-on-click-modal=false
            :before-close="preViewHandleClose">
            <div class="title" slot="title" style="height: 20px;">
                <span>{{ previewObj.title }}</span>
            </div>
            <div class="bottom-content">
                <iframe :src="previewObj.urlValue" id="bi_iframe" frameborder="0" @load="adjustIframe"></iframe>
            </div>
        </el-dialog>


//data

    previewObj: {
                //标题
                title: '',
                //控制弹框显示隐藏
                previewVisible: false,
                //iframe地址
                urlValue: null,
                //内嵌地址的宽高
                widthValue: 0,
                heightValue: 0,
            }

//方法
//1.点击预览方法   
     // 预览 拿到需要的值
        lookFn(item) {
            this.previewObj.previewVisible = true
            this.previewObj.widthValue = item.width
            this.previewObj.heightValue = item.height
            this.previewObj.title = item.name
            var url = "windowPreview.html";
            var urlWithParams = url + "?appKey=" + encodeURIComponent(item.appkey) + "&appId=" + encodeURIComponent(item.id);
            this.previewObj.urlValue = urlWithParams
            }


//2.  
    //iframe load事件
        adjustIframe() {
            var iframe = document.getElementById('bi_iframe');
            // 获取父级容器的宽高  //也就是弹框在样式中设置的高宽 最好给固定值 在这里可以直接拿到 
            var containerWidth = 1145;
            var containerHeight = 600;

            // 计算缩放比例  
            var scaleWidth = containerWidth / this.previewObj.widthValue;
            var scaleHeight = containerHeight / this.previewObj.heightValue;
            var scale = Math.min(scaleWidth, scaleHeight); // 选择较小的缩放比例以保持宽高比  

            // 应用缩放和定位  
            iframe.style.transformOrigin = 'top left';
            iframe.style.transform = `scale(${scale}) translate(-50%, -50%)`;

            // 如果需要,可以调整iframe的宽高以匹配容器  
            // 但由于我们使用了scale,所以通常不需要这样做  
            iframe.style.width = `${this.previewObj.widthValue}px`;
            iframe.style.height = `${this.previewObj.heightValue}px`;
        },


//样式
<style lang="scss">
#preview-box {
    .el-dialog {
        width: 1145px;
    }

    .el-dialog__body {
        padding: 0px;
        overflow: hidden;
        /* 隐藏超出容器的内容 */
        position: relative;
        /* 用于定位iframe */
    }

    .el-dialog__header {
        color: #fff;
    }
}

.bottom-content {
    width: 100%;
    height: 600px;
    position: relative;

    iframe {
        width: 100%;
        /* 初始宽度设置为100% */
        height: 100%;
        /* 初始高度设置为100% */
        border: none;
        position: absolute;
        top: 50%;
        left: 50%;
        /* 初始不应用缩放 */
        transform: none;
        transition: transform 0.3s ease;
        /* 可选的过渡效果 */
    }
}
</style>

最后实现效果就是

3840

1920

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667152.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …

BioVendor—sHLA-G ELISA试剂盒

人类白细胞抗原-G (HLA-G)与其他MHC类基因的不同之处在于它的低多态性和产生七种HLA-G蛋白的选择性剪接&#xff0c;这些蛋白的组织分布局限于正常的胎儿和成人组织&#xff0c;这些组织对先天和后天免疫细胞都具有耐受性。可溶性HLA-G是一种免疫抑制分子&#xff0c;诱导活化的…

PyQt5创建与MySQL数据库集成的应用程序

最近&#xff0c;对之前的mysql管理系统进行了更新升级&#xff0c;制作了一版关于车牌的管理系统&#xff01; &#xff08;1&#xff09;实现了对车牌和用户基本信息的增删改查的功能 &#xff01; &#xff08;2&#xff09;加入了对数据库的刷新和状态显示功能 &#xff…

Python3位运算符

前言 本文介绍的是位运算符&#xff0c;位运算可以理解成对二进制数字上的每一个位进行操作的运算&#xff0c;位运算分为 布尔位运算符 和 移位位运算符。 文章目录 前言一、位运算概览1、布尔位运算符1&#xff09;按位与运算符 ( & )2&#xff09;按位或运算符 ( | )3…

一款C#开源、简单、免费的屏幕录制和GIF动画制作神器

前言 今天要给大家推荐一款由C#语言开发且开源的操作简单、免费的屏幕录制和GIF动画制作神器&#xff1a;ScreenToGif 。 工具介绍 ScreenToGif 是一款免费的开源屏幕录制和GIF 制作工具。它可以帮助用户捕捉计算机屏幕上的实时动画&#xff0c;并将其保存为高质量的 GIF 图像…

【鸟哥】Linux笔记-硬件搭配

在Linux这个系统当中&#xff0c;几乎所有的硬件设备文件都在/dev这个目录内。打印机与软盘呢&#xff1f;分别是/dev/lp0, /dev/fd0。 几个常见的设备与其在Linux当中的文件名&#xff1a; 如果你的机器使用的是跟网际网络供应商 &#xff08;ISP&#xff09; 申请使用的云端…

Unity【入门】脚本基础

Unity脚本基础 文章目录 1、脚本基本规则1、创建规则2、MonoBehavior基类3、不继承MonoBehavior的类4、执行的先后顺序5、默认脚本内容 2、生命周期函数1、概念2、生命周期函数有哪些3、生命周期函数支持继承多态 3、Inspector窗口可编辑的变量4、Mono中的重要内容1、重要成员2…

thinkphp6 queue队列的maxTries自定义

前景需求&#xff1a;在我们用队列的时候发现maxtries的个数时255次&#xff0c;这个太影响其他队列任务 我目前使用的thinkphp版本是6.1 第一部定义一个新的类 CustomDataBase&#xff08;我用的mysql数据库存放的队列&#xff09; 重写__make 和createPlainPayload方法 …

第10周 企业认证、分布式事务,分布式锁方案落地

第10周 企业认证、分布式事务&#xff0c;分布式锁方案落地 ********************************************************************************************** 本周我们将对企业入驻认证的流程进行落地&#xff0c;并且结合分布式缓存中间件Redis与Redisson进行相关的技术方…

Easy RoCE:在SONiC交换机上一键启用无损以太网

RDMA&#xff08;远程直接内存访问&#xff09;技术是一种绕过 CPU 或操作系统&#xff0c;在计算机之间直接传输内存数据的技术。它释放了内存带宽和 CPU&#xff0c;使节点之间的通信具有更低的延迟和更高的吞吐量。目前&#xff0c;RDMA 技术已广泛应用于高性能计算、人工智…

web项目规范配置(husky、eslint、lint-staged、commit)

背景&#xff1a; 团队开发为了保证提交代码格式统一&#xff0c;通常在进行代码提交的时候对暂存区代码进行校验&#xff0c;如没有通过eslint(本例使用eslint)校验&#xff0c;则不能提交到远端。 安装依赖 husky 、eslint 、prettier 、lint-staged npm install husky e…

【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色

效果图 新建activityScrollTop.js作为mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景颜色为完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字颜色};},onPageScroll(e) {// 设置背景const newAlpha Math.min((e.s…

手机耳机哪个品牌音质好

在寻找音质出色的手机耳机时&#xff0c;品牌选择显得尤为重要。市场上众多知名品牌提供了各式各样的耳机产品&#xff0c;它们在音质、降噪功能、设计等方面各有千秋。以下是一些在音质上表现优异的手机耳机品牌的分析&#xff1a; 索尼&#xff1a;索尼的耳机以其卓越的降噪技…

Django企业招聘后台管理系统开发实战四

前言 首先我们看一下产品的需求背景&#xff0c;这个产品为了解决招聘面试的过程中&#xff0c;线下面试管理效率低&#xff0c;面试过程和结果不方便跟踪的痛点 招聘管理的系统几乎是每一家中小公司都需要的产品 我们以校园招聘的面试为例子来做 MVP 产品迭代 首先我们来看一下…

【网络安全的神秘世界】在win11搭建pikachu靶场

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 下载pikachu压缩包 https://github.com/zhuifengshaonianhanlu/pikachu 下载好的pikachu放在phpstudy_pro/www目录下 创建pikachu数据库 打开phpstudy软件…

容量为0多线程操作的SynchronousQueue(FIFO)

一:简介 SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take。SynchronousQueue的优点在于其直接性和高效性,它实现了线程间的即时数据交换,无需中间缓存,确保了数据传输的实时性和准确性,同时,其灵活的阻塞机…

恒压频比开环控制系统Matlab/Simulink仿真分析(SVPWM控制方式)

一、SVPWM 交流电机需要输入三相正弦电流的最终目的就是在电机空间形成圆形磁场&#xff0c;从而产生恒定的电磁转矩。把逆变器和交流电机视为一个整体&#xff0c;以圆形旋转磁场为目标来控制逆变器的工作&#xff0c;这种控制方法称为“磁链跟踪控制”&#xff0c;磁链轨迹的…

洛谷P1035 级数求和 题解

#题外话&#xff08;第42篇题解&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P1035#思路 没啥思路&#xff0c;这其实偏向模拟一点&#xff0c;按照题目说的做就行了。 #代码 原来是这个熊样的&#xff08;都能AC&#xff0c;优化的问题&#xff09; …

九阳股份的“而立危机”:业绩三连降,押注清洁赛道迷雾重重?

“致敬伟大的小问题”&#xff0c;这是步入而立之年的九阳股份&#xff08;SZ:002242&#xff0c;下同“九阳”&#xff09;新品发布会的主题&#xff0c;也是九阳过去30年发展历程的缩影。 在经历“宅经济”催生的流量井喷期后&#xff0c;厨房小家电市场受困于热度退潮的浅滩…

【spring】Spring Boot3.3.0发布啦

spring最新版本 springboot官网&#xff1a;Spring Boot :: Spring Boot Spring Boot 3.3 发行说明&#xff1a;https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.3-Release-Notes 开发环境的要求对比表 Spring BootJDKSpringMavenGradle3.3.017 ~ 226.1…