当前位置: 首页 > news >正文

一个vue mixin 小案例,实现等比例缩放

mixin.js

/** @Author: jinjianwei* @Date: 2024-07-24 16:17:16* @Description: 等比例缩放,屏幕适配 mixin 函数*/// * 默认缩放值
const scale = {width: '1',height: '1',
}
// * 设计稿尺寸(px)
const baseWidth = 1920
const baseHeight = 1080
// * 需保持的比例(默认1.77778)
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))export default {data() {return {// * 定时函数drawTiming: null,}},mounted() {//进入触发this.calcRate()window.addEventListener('resize', this.resize)},beforeDestroy() {window.removeEventListener('resize', this.resize)},computed: {getRef() {return null}},methods: {calcRate() {//拿到整个页面元素let appRef = this.getRef//如果没有值就结束if (!appRef) return// 当前宽高比const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))//判断:如果有值代表页面变化了if (appRef) {//判断当前宽高比例是否大于默认比例if (currentRate > baseProportion) {// 如果大于代表更宽了,就是放大了//那么把默认缩放的宽高改为:同比例放大scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)scale.height = (window.innerHeight / baseHeight).toFixed(5)console.log(scale.width, scale.height, '放大');//整个页面的元素样式,缩放宽高用当前同比例放大的宽高appRef.style.transform = `scale(${scale.width}, ${scale.height})`} else {// 如果不大于默认比例代表缩小了。//那么把默认缩放的宽高改为:同比例缩小scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)scale.width = (window.innerWidth / baseWidth).toFixed(5)console.log(scale.width, scale.height, '缩小');//整个页面的元素样式,缩放宽高用当前同比例放大的宽高appRef.style.transform = `scale(${scale.width}, ${scale.height})`}//等dom节点加载完后执行this.$nextTick(() => {//appRef.getBoundingClientRect() 为获取当前div容器距离windows视图的上边距与左边距let appRefBoundingClientRect = appRef.getBoundingClientRect()// 第一种方式// let finallyTop = this.prevAppRefBoundingClientRect.top === 0 ? -appRefBoundingClientRect.top : (this.prevAppRefBoundingClientRect.top - appRefBoundingClientRect.top)// let finallyLeft = this.prevAppRefBoundingClientRect.left === 0 ? -appRefBoundingClientRect.left : (this.prevAppRefBoundingClientRect.left - appRefBoundingClientRect.left)// appRef.style.top = `${finallyTop}px`// appRef.style.left = `${finallyLeft}px`// this.prevAppRefBoundingClientRect.top = finallyTop// this.prevAppRefBoundingClientRect.left = finallyLeft// 第二种方式let finallyTop = 0;let finallyLeft = 0;if (this.isFirst) {// 第一次缩放偏移量finallyTop = appRefBoundingClientRect.topfinallyLeft = appRefBoundingClientRect.leftthis.isFirst = false;} else {// 第二次变化后的缩放偏移量finallyTop = this.prevAppRefBoundingClientRect.top * (1 - scale.height) / (1 - this.scalePrev)finallyLeft = this.prevAppRefBoundingClientRect.left * (1 - scale.height) / (1 - this.scalePrev)}// 设置缩放元素偏移量appRef.style.top = `${-finallyTop}px`;appRef.style.left = `${-finallyLeft}px`;this.scalePrev = scale.width;this.prevAppRefBoundingClientRect.top = finallyTopthis.prevAppRefBoundingClientRect.left = finallyLeft});}},resize() {clearTimeout(this.drawTiming)this.drawTiming = setTimeout(() => {this.calcRate()}, 200)}}
};

这里注意要拿到引用组件的dom元素,需要用计算属性。

引用组件里的代码

// html
<div  ref="domRef" id="index"><div>// css
#index {color: #d3d6dd;//此处的宽高就是你设计稿的尺寸width: 1920px;height: 1080px;//绝对定位 脱离标准流position: absolute;//分别将 div容器向左 和 向下 移动50%top: 50%;left: 50%;// 设置以容器左上角为中心,进行缩放移动transform-origin: left top;//再将容易往反方向分别移动50%,这样div容器 一直处于可视窗口中心transform: translate(-50%, -50%);//超出部位隐藏overflow: hidden;
}// js
import studioMixin from "../../mixin";
mixins: [studioMixin],computed: {getRef(){return this.$refs.domRef}},

参考

相关文章:

一个vue mixin 小案例,实现等比例缩放

mixin.js /** Author: jinjianwei* Date: 2024-07-24 16:17:16* Description: 等比例缩放&#xff0c;屏幕适配 mixin 函数*/// * 默认缩放值 const scale {width: 1,height: 1, } // * 设计稿尺寸&#xff08;px&#xff09; const baseWidth 1920 const baseHeight 1080 …...

【数据结构初阶】单链表经典算法题十二道——得道飞升(中篇)

hi&#xff0c;bro—— 目录 5、 链表分割 6、 链表的回文结构 7、 相交链表 8、 环形链表 【思考】 —————————————— DEAD POOL —————————————— 5、 链表分割 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), …...

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…...

IP地址在后端怎么存才好?

目录 一、地址的区别 二、字符串存取 2.1 IPV4空间大小 2.2 IPV6空间大小 三、整数存取 四、总结 4.1 字符串存取优缺点 4.2 整数存取的优缺点 一、地址的区别 在网络中&#xff0c;IP地址分为IPV4和IPV6&#xff0c;IPV4是一共占32位的&#xff0c;每8位小数点分隔&…...

《通讯世界》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《通讯世界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《通讯世界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;科学技术部 主办单位&#xff1a;中国科学技…...

go get的原理

1、GOPROXY 可以写在os的环境变量中&#xff0c;也可以写在go的环境变量中 GOPROXYhttps://goproxy.cn,direct 表示先去第一个网址下载&#xff0c;下载不到&#xff0c;就直接下载 也可以配置GOPRIVATE私有仓库&#xff0c;遇到私有仓库中的包&#xff0c;就直接下载 2、go…...

jenkins替换配置文件

1.点击首页的【Manage Jenkins】-【Manage Plugins】&#xff0c;在选项【Available plugins】安装 Config File Provider Plugin &#xff0c;安装后重启jenkins 2.安装完成后会有这个图标&#xff0c;点进去 3.点击新建&#xff0c;选择自定义&#xff0c;填入要替换的文件…...

C# Web控件与数据感应之 填充 HtmlTable

C# Web控件与数据感应之 填充 HtmlTable 在C#中&#xff0c;特别是在ASP.NET Web Forms应用中&#xff0c;你可能会遇到需要将数据动态填充到HTML表格&#xff08;HtmlTable&#xff09;中的场景。这通常涉及到遍历数据源&#xff08;如数据库查询结果、集合等&#xff09;&am…...

HAL库源码移植与使用之SPI驱动VS1053音频解码

你可以理解为带着dac adc芯片功能的集成芯片&#xff0c;声音的高低音形成由频率决定&#xff0c;大小声由波峰决定&#xff0c;所以采集时记录时间和电压值就可以确定高低音色和大小声&#xff0c;形成声音波形&#xff0c;再把波形用dac输出给喇叭&#xff0c;让喇叭在对应时…...

RK3568 Linux 平台开发系列讲解(内核入门篇):从内核的角度看外设芯片的驱动

在嵌入式 Linux 开发中,外设芯片的驱动是实现操作系统与硬件之间交互的关键环节。对于 RK3568 这样的处理器平台,理解如何从内核的角度构建和管理外设芯片的驱动程序至关重要。 1. 外设驱动的基础概念 外设驱动(Device Driver)是操作系统与硬件设备之间的桥梁。它负责控…...

初识C++ · AVL树(2)

目录 前言&#xff1a; 1 左右旋 2 右左旋 3 部分细节补充 3.1 单旋和插入 3.2 部分小函数 前言&#xff1a; AVL树作为一种结构&#xff0c;理解树的本身是不大难的&#xff0c;难的在于&#xff0c;树旋转之后的连接问题&#xff0c;写AVL树的代码大部分都是在旋转部分…...

LLM:归一化 总结

一、Batch Normalization 原理 Batch Normalization 是一种用于加速神经网络训练并提高稳定性的技术。它通过在每一层网络的激活值上进行归一化处理&#xff0c;使得每一层的输入分布更加稳定&#xff0c;从而加速训练过程&#xff0c;并且减轻了对参数初始化的依赖。 公式 …...

蓝桥杯 2024 年第十五届省赛真题 —— 最大异或结点

目录 1. 最大异或结点1. 问题描述2. 输入格式3. 输出格式4. 样例输入5. 样例输出6. 样例说明7. 评测用例规模与约定 2. 解题思路1. 解题思路2. AC_Code 1. 最大异或结点 1. 问题描述 小蓝有一棵树,树中包含 N N N 个结点&#xff0c;编号为 0 , 1 , 2 , ⋯ , N − 1 0,1,2,…...

AV1技术学习:Loop Restoration Filter

环路恢复滤波器&#xff08;restoration filter&#xff09;适用于64 64、128 128 或 256 256 像素块单元&#xff0c;称为 loop restoration units (LRUs)。每个单元可以独立选择是否跳过滤波、使用维纳滤波器&#xff08;Wiener filter&#xff09;或使用自导滤波器&#…...

如何使用python实现自动化办公?干货满满!

Python作为一种简单而强大的编程语言&#xff0c;不仅在数据科学和软件开发领域广受欢迎&#xff0c;还在办公自动化方面发挥了巨大作用。通过Python&#xff0c;我们可以编写脚本来自动执行各种重复性任务&#xff0c;从而提高工作效率并减少错误。在本文中&#xff0c;我们将…...

QT Creator下载安装详细教程(保姆级教程)

qt下载安装 1.下载网址 通过清华大学开源软件镜像站进行下载&#xff1a;链接: https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/online_installers/ 这里我选的是4.4版本的&#xff0c;也可以选择4.7版本&#xff0c;问题不大。 根据电脑系统选择下载linux…...

无人机公司销售需要什么资质

国家民航局于2024年1月1日实施了《无人驾驶航空器飞行管理暂行条例》&#xff0c;根据这个管理条例里面的 第十一条 使用除微型以外的民用无人驾驶航空器从事飞行活动的单位应当具备下列条件&#xff0c;并向国务院民用航空主管部门或者地区民用航空管理机构申请取得民用无人驾…...

代码自动化重构工具OpenRewrite介绍

OpenRewrite 是一个用于大规模自动化代码重构的开源框架&#xff0c;它极大地提升了开发人员的研发效率&#xff0c;通过自动化地进行代码重构和转换&#xff0c;帮助开发人员消除代码库中的技术债务。 通过 LST、访问器和配方的结合&#xff0c;OpenRewrite 能够实现准确的代…...

Win11安装Docker

下载Docker Desktop for Windows 下载 下载连接&#xff1a;Install Docker Desktop on Windows | Docker Docs 地址在国外&#xff0c;需要科学上网。也可使用我提供的&#xff0c;百度网盘&#xff1a;https://pan.baidu.com/s/1232TTkkzLsoZyFjC3bmgiQ 安装 下载完成之后…...

Windows电脑如何启动RTSP服务实现本地摄像头数据共享

技术背景 提起Windows共享本地摄像头&#xff0c;好多人想到的是通过ffmepg或vlc串流到服务器&#xff0c;实际上&#xff0c;用轻量级RTSP服务更简单&#xff0c;本文就介绍下&#xff0c;如何用大牛直播SDK的Windows轻量级RTSP服务&#xff0c;采集摄像头&#xff0c;生成本…...

NUS-WIDE数据集实战:从原始文件到多模态数据集的完整预处理指南

1. NUS-WIDE数据集简介与下载指南 NUS-WIDE是一个经典的多标签图像数据集&#xff0c;由新加坡国立大学的研究团队构建。这个数据集包含了269,648个样本和81个类别&#xff0c;每个样本可能同时属于多个类别&#xff08;这就是多标签的含义&#xff09;。数据集最初是为了研究网…...

springboot-vue基于web的智慧校园学生信息管理平台设计和实现

目录技术栈选择系统模块划分开发流程规划关键代码示例&#xff08;后端&#xff09;部署方案扩展性考虑注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Spring Boot框架&#xff0c;提供RESTful AP…...

LangFlow实战案例:如何用拖拽方式搭建智能写作助手

LangFlow实战案例&#xff1a;如何用拖拽方式搭建智能写作助手 1. 引言&#xff1a;为什么选择LangFlow 在AI技术快速发展的今天&#xff0c;大语言模型已经展现出强大的文本生成能力。然而&#xff0c;对于大多数非技术背景的内容创作者来说&#xff0c;直接调用API或编写复…...

VGG‘文艺复兴’背后的思考:从RepVGG看AI模型设计的‘简’与‘繁’哲学

VGG式架构的当代启示&#xff1a;当模型设计遇见"大道至简"的智慧 在深度学习模型架构的演进历程中&#xff0c;我们见证了一场耐人寻味的"轮回"——从早期VGG的极简主义&#xff0c;到Inception、ResNet等复杂多分支结构的盛行&#xff0c;再到如今RepVGG…...

告别规则几何!用Python+Matlab为gprMax创建任意复杂地质模型(附HDF5文件生成代码)

突破几何限制&#xff1a;用PythonMatlab构建gprMax复杂地质模型的完整指南 地质雷达模拟领域的研究者常面临一个尴尬困境&#xff1a;脑海中的地质结构复杂多变&#xff0c;但建模工具却只能生成规则几何体。本文将彻底解决这一矛盾&#xff0c;带您掌握跨平台协作建模技术&am…...

别只玩文生图了!手把手教你用Stable Diffusion 1.4的VAE模型,无损压缩和重构你的本地图片

解锁Stable Diffusion VAE的隐藏技能&#xff1a;从AI绘画到专业图像处理实战 你是否曾为海量图片的存储空间发愁&#xff1f;或是苦恼于传统图像处理工具的繁琐流程&#xff1f;今天&#xff0c;我们将颠覆你对Stable Diffusion的认知——它的VAE模型远不止是AI绘画的配角&…...

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

用C#驱动斑马ZT410 RFID打印机&#xff1a;从基础连接到中文打印实战 斑马ZT410 RFID打印机在物流、零售和资产管理领域应用广泛&#xff0c;但许多开发者仍停留在手动拼接ZPL指令的原始阶段。这种工作方式不仅效率低下&#xff0c;还容易因指令格式错误导致打印失败或RFID写入…...

基于matlab的简单数字验证码识别系统 【验证码识别】计算机视觉,数字图像处理,含GUI界面...

基于matlab的简单数字验证码识别系统 【验证码识别】计算机视觉&#xff0c;数字图像处理&#xff0c;含GUI界面。 步骤&#xff1a;图像降噪&#xff0c;二值化&#xff0c;定位数字&#xff0c;分割合并&#xff0c;字符识别。 功能&#xff1a;可识别简单的数字验证码图片&a…...

面向高精度应用的数字控制PDH稳频电路设计与实现

1. 数字控制PDH稳频电路的核心价值 在原子钟、引力波探测这类需要亚赫兹级别频率稳定度的尖端实验中&#xff0c;激光稳频技术就像精密机械中的轴承——看似不起眼却决定着整个系统的性能上限。传统模拟PDH&#xff08;Pound-Drever-Hall&#xff09;电路虽然能提供MHz量级的反…...

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

R语言孟德尔随机化环境搭建&#xff1a;从报错到成功的全流程指南 第一次在R中安装孟德尔随机化相关工具包时&#xff0c;那种挫败感我至今记忆犹新。明明按照教程一步步操作&#xff0c;却不断遭遇各种报错——网络超时、依赖缺失、API限制...这些看似简单的问题足以让一个生物…...