首页 > 其他分享 >vue在手机端页面缩放的控制

vue在手机端页面缩放的控制

时间:2023-05-12 15:45:59浏览次数:29  
标签:vue 缩放 大图 initial width scale 页面

1,问题的提出

某vue前端程序,在手机APP上运行。需要做多图片浏览效果,要求如下:

  1. 进入浏览页面时,显示适应手机页面的缩小图,
  2. 用户可采用双指缩放,放大查看小图
  3. 用户点击图片时,弹出大图,宽度尺寸固定为1200px
  4. 大图可移动查看,但不允许缩放,点击大图后退出

以上要求中,第2和3叠加后,可能造成显示的大图过大,不利于查看。

如用户在显示小图时,双指放大3倍,此时页面上所有元素均放大3倍;用户再点击图片,此时显示的大图实际宽度为 1200*3=3600px

如此大幅图片并不利于查看图片。

 

因此,需要采取一种措施,用户可以放大小图,但是在单击显示大图时,不要放大大图的尺寸,而是让大图始终保持宽度尺寸固定为1200px。

 

2,方案分析

我设想的解决方案是,在显示大图前,获知当前页面的缩放比例R,然后在显示大图前,在程序中设置页面的scale属性为 1/R。即

transform: scale(1/R);

通过设置将页面的缩放抵消掉,使页面仍处于原始大小。这样,查看大图时就能1:1显示了。

 

但是我在网上搜索良久,竟然未能找到一个方法能获得当前手机页面的缩放比例值。

有说用addEventListener将容器(DIV)的touchstart 、touchmove 进行绑定监听,获得手势的比例,但本人测试发现,双指滑动时这些事件并不触发。

也许是我代码有误,后改为将事件绑定到document上,也不行,获取不到屏幕当前的缩放比。

 

于是转换思路,看到有文章说到viewport的scale属性,与页面缩放有关。但是查看文档,也只有以下三个初始设置值,并没有一个可以获得当前scale的变量:

  • initial-scale
  • minimum-scale
  • maximum-scale

郁闷中想到,重置initial-scale 为1 也许能让页面比例复原。代码如下:

document.getElementsByName('viewport')[0].setAttribute('content','width=device-width,initial-scale=1.0')

 

但是,发现上述语句不起作用!

后经反复试验,发现即使页面已经放大,其initial-scale属性值仍然为1,此时用代码去设置为1,相当于没有变化,所以被忽略了没效果。

其实,可以先将scale改为非常接近1的数值,再改回1即可有效。代码如下:

            document.getElementsByName('viewport')[0].setAttribute('content','width=device-width,initial-scale=1.01')
            document.getElementsByName('viewport')[0].setAttribute('content','width=device-width,initial-scale=1.0')

 

3,总结

本人对前端编程不熟悉,因此即使是一个小的功能也要摸索好久,好在最终得到了解决。

发此文出来,也是希望有知道如何获得手机当前页面缩放比的大佬教教我,感谢!

 

标签:vue,缩放,大图,initial,width,scale,页面
From: https://www.cnblogs.com/jackkwok/p/17394327.html

相关文章

  • Vue2电商实战项目(三)
    排序的操作要求的数据格式-数据格式说明-'1'表示'综合排序'-'2'表示'价格排序'-'asc'表示'升序'-'desc'表示降序-项目的数据格式的样子 -1:asc -1:desc -2:asc -2:desc###Search.index.vue......&quo......
  • golang web页面动态加载实现
            Go的web页面动态加载实现。  1.在MySQL中添加表项users,构造多条数据。CREATETABLEIFNOTEXISTSusers(idINTUNSIGNEDAUTO_INCREMENT,usernameVARCHAR(255)NOTNULL,passwordVA......
  • vue dom拖拽指令
    还可以封装一下代码,不想封了,移动端pc端区别:事件不同,pc端鼠标事件移动端触摸事件;pc端直接获取e.pageX,移动端e.changedTouches[0].pageX使用直接在dom绑定v-dragdirectives:{drag(el,bindings,vnode){letphone=falseletmax=max||0if(wi......
  • vue 关于element el-dialog使用心得-传参问题
    最近写一个功能用到了弹窗,在弹窗内显示一个子组件。关于el-dialog的el-dialog:visible.sync="xxx  参考https://blog.csdn.net/startyangu/article/details/128029464?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%......
  • Vue项目报错: Component name “xxx“ should always be multi-word vue/multi-word-co
    报错的意思是组件名应该始终是多单词,不应该以单个单词命名组件解决办法1:修改组件名称:例如当前的登陆组件名是login.vue修改成LoginName.vue,组件名需要以驼峰式命名至少两个单词,不一定都得是LoginName.vue可以是NameLogin.vue也可以是LoginNiu.vue总之就是以驼峰式命名......
  • Vue 打包项目出现内存溢出问题
    Vue项目打包遇到内存溢出的问题:npmiincrease-memory-limit-gincrease-memory-limit再执行npmrundev后出现以下问题: 百度了一下,在node_module下的.bin文件夹中查找这个文件: 将这个字符串的双引号去掉:再次运行npmrundev 就可以了 ......
  • vue3 父子组件传值
    父传子组件<template><div><!--通过自定义属性传递值--><Subassembly:value="doc"/></div></template><scriptsetup>import{ref}from'vue'importSubassemblyfrom'./Subassembly.vue&#......
  • vue 存储cookie 与使用
    安装cookie依赖包npmi@vueuse/integrations安装cookienpmiuniversal-cookie使用cookieimport{useCookies}from"@vueuse/integrations/useCookies"constcookie=useCookies();存取cookiecookie.set("token","123456789")获取cookiecookie.......
  • vue table 没有数据的时候展示无数据
    element-table无数据的时候,把“暂无数据”改成其他文字或图片 <el-table :data="tableData" ><el-table-columnlabel="序号"prop="amount""min-width="80"align="center"><template#default="scope">......
  • vue-element-admin安装依赖报错问题
    前言vue-element-admin中文官网要使用中文版,直接去gitgithub下载包:https://github.com/PanJiaChen/vue-element-admin/tree/i18ngitee下载包:https://gitee.com/panjiachen/vue-element-admin/tree/i18n分支记得选择这个i18n问题解决1.修改package.json文件tui-editor这......