<template><div><img src="../../assets/安全协议.png" :alt="alt" @click="open()" style="width: 100%;height: 100%" title="点击查看图片" :id="'vc-imgself-img-'+attach"><div class="full-img" v-if="show"><div @click="on"  draggable="false" ><img src="../../assets/安全协议.png" id="image" alt="" style="width: 100%" class="img-state" :alt="alt || ''"></div><div class="btns"><button type="button" name="button" class="btn btn-primary" @click="close()" :id="'vc-imgself-close-'+attach">关闭</button></div></div></div>
</template><script>import $ from 'jquery'export default {props: {src: {type: String},width: {default: 60},height: {default: 60},alt: {default: ''},attach: {type: String,default: 'name'}},data () {return {show: false,deg: 0,power: 1}},methods: {open () {this.deg = 0this.power = 0.5this.show = true},close () {this.show = false},on(){$(function (){let result = {}var eleImg = document.querySelector('#image');var store = {scale: 1};// 缩放处理eleImg.addEventListener('touchstart', function (event) {var touches = event.touches;var events = touches[0];var events2 = touches[1];var x = eleImg.offsetLeft;var y = eleImg.offsetTop;if (!events) {return;}event.preventDefault();// 第一个触摸点的坐标store.pageX = events.pageX;store.pageY = events.pageY;store.x = x;store.y = y;store.moveable = true;if (events2) {store.pageX2 = events2.pageX;store.pageY2 = events2.pageY;}store.originScale = store.scale || 1;},{ passive: false });document.addEventListener('touchmove', function (event) {if (!store.moveable) {return;}event.preventDefault();var touches = event.touches;var events = touches[0];var events2 = touches[1];result.textContent = '触摸点数量:' + touches.length;if (events2) {if (!store.pageX2) {store.pageX2 = events2.pageX;}if (!store.pageY2) {store.pageY2 = events2.pageY;}var getDistance = function (start, stop) {return Math.hypot(stop.x - start.x, stop.y - start.y);};var zoom = getDistance({x: events.pageX,y: events.pageY}, {x: events2.pageX,y: events2.pageY}) /getDistance({x: store.pageX,y: store.pageY}, {x: store.pageX2,y: store.pageY2});var newScale = store.originScale * zoom;if (newScale > 4) {newScale = 4;}store.scale = newScale;eleImg.style.transform = 'scale('+ newScale +')';result.textContent = 'zoom: '+ zoom + ', apply scale: ' + newScale;}else{var moveX = events.pageX - store.pageX;var moveY = events.pageY - store.pageY;var imagetop = store.x + moveX;var imageleft = store.y + moveY;$('#image').css({'margin-top':imageleft+'px','left':imagetop+'px'});}},{ passive: false });document.addEventListener('touchend', function () {store.moveable = false;delete store.pageX2;delete store.pageY2;},{ passive: false });document.addEventListener('touchcancel', function () {store.moveable = false;delete store.pageX2;delete store.pageY2;},{ passive: false });});}},ready(){// this.src="../../assets/安全协议.png"}}
</script>
<style media="screen">.full-img {position: fixed;top: 0;bottom: 0;left: 0;right: 0;z-index: 20;background: rgba(0,0,0,0.8);display: flex;overflow: auto;flex-direction: column;justify-content: center;align-items: center;color: #fff;}.btns {position: fixed;bottom: 100px;height: auto;}.btns button {margin-right: 20px;}.img-state {}
</style>

关于vue项目,手机端实现双指控制图片缩放相关推荐

  1. vue项目手机端适配

    1.安装 flexible和 postcss-px2rem yarn add lib-flexible --save yarn add postcss-px2rem --save 2. 引入lib-f ...

  2. vue+weui 手机端项目

    vue+weui 手机端项目 俩个地址 https://weui.io/ https://github.com/Tencent/weui/wiki?tdsourcetag=s_pctim_aiomsg ...

  3. vue 限制手机端访问

    vue 限制手机端访问 APP.vue页面 mounted() {var str = navigator.userAgentvar ipad = str.match(/(iPad).*OS\s([\d ...

  4. 手机端宝贝描述中每张图片的宽要在480到1500之间,最大高度为2500, 以下图片不满足

                 上图是近期小编与一位店主的聊天截图,从截图中我们可以知道,这位店主在使用复制软件来复制宝贝上传时出现了一些问题,下面,小编将上传出现的错误.分析过程及解决方法列示如下,希望能 ...

  5. halcon窗体的移动和缩放_halcon与C#联合编程之鼠标控制图片缩放,拖动,roi

    [实例简介]本实例展示了halcon与C#联合编程之鼠标控制图片缩放,拖动,roi [实例截图] [核心代码]using ChoiceTech.Halcon.Control; using Halcon ...

  6. QT学习笔记(三)——vs2019+Qt实现打开影像并以鼠标为中心用滚轮控制图片缩放

    vs2019+Qt实现打开影像并以鼠标为中心用滚轮控制图片缩放 之前写了一个博客讲怎么显示一张影像,那个是基于Qpainter的 今天使用QLabel来显示影像,并且用鼠标滚轮控制缩放. 关于图像的打 ...

  7. vue页面手机端开发总结

    当图片的某元素是一张图片,可不设置宽高,将样式设置为如下,这样图片就会撑起来页面,避免一些宽高在不同机型不协调的问题. display: block; width: 100%; 需要条件判断显示不同的 ...

  8. vue项目设置img标签的默认图片

    方法一: 首先看看以前(非vue)项目是怎么设置img标签的默认图片: // 设置默认图片 <img src="http://res.spreadwin.com/gmc38PE.jpg ...

  9. VUE项目开发,使用canvas实现图片签名编辑手写板功能

    vue项目使用canvas实现手写板功能 完整的效果图如下: 直接上代码,下面代码可以当做组件直接引用,根据自己的需求传对应的图片即可,操作图标需要自己替换,保存功能也需要自己实现. CanvasDi ...

最新文章

  1. 更新自定义表时的通用锁对象
  2. ui kit html,开始使用
  3. 使一个div垂直+水平居中的几种方法
  4. nginx 反向代理web应用将https请求转成http请求时,必须注意事项
  5. LeetCode Algorithm 面试题 10.05. 稀疏数组搜索
  6. Codeforces Round #294 (Div. 2)
  7. 【转载保存】B+树索引原理以及应用案例
  8. python调用摄像头录制视频_Python OpenCV使用摄像头捕获视频
  9. 基于cygwin构建u-boot(三)make错误忽视
  10. 二叉树遍历非递归写法
  11. rnn--重新温习实现MNIST手写体识别
  12. 移动前端开发屏幕宽度设置之viewport的深入理解
  13. npm环境报错解决方案
  14. linux syn 队列,TCP SYN队列与Accept队列详解
  15. 公有云、私有云、混合云
  16. (一种因疏忽而发生的错误)Qt LNK2019:无法解析的外部符号
  17. sicp3.5.2、3.5.3节部分习题尝试解答
  18. Lepus监控redis
  19. 2014广东计算机一级试题及答案,广东计算机一级试题2014版
  20. ThinkPHP5支付宝支付(当面付)付款码ISV服务商模式

热门文章

  1. 你的苹果手机耗电很严重?试着关掉这几个设置,一天一充很简单
  2. 银行也“地域歧视”?金融风控中的用户画像其实很重要
  3. sync.Mutex 与 sync.WaitGroup 使用示例
  4. 区块链包装是什么,区块链项目包装又是怎么做的,近距离接触大咖为您一一解读
  5. 数据库审计与风险控制解决方案
  6. hitfilm 导出的视频长度设置 duration
  7. c语言中下标运算符的作用,C语言下标运算符([])
  8. 问题解决:枚举值插入数据库时报错 java.lang.IllegalArgumentException: invalid comparison: XXEnum and java.lang.String
  9. 【入门】赵神牛的游戏
  10. “百度Hi”制造大震荡 即时通信激变