微信小程序实现通过双向滑动缩放图片大小的方法


Posted in Javascript onDecember 30, 2018

本文实例讲述了微信小程序实现通过双向滑动缩放图片大小的方法。分享给大家供大家参考,具体如下:

在做小程序开发的过程中,后端传来一张图片地图,需要实现双手指滑动,使图片缩放,最终得出了一下代码:

js :

Page({
 data: {
  touch: {
   distance: 0,
   scale: 1,
   baseWidth: null,
   baseHeight: null,
   scaleWidth: null,
   scaleHeight: null
  }
 },
 touchStartHandle(e) {
 // 单手指缩放开始,也不做任何处理
 if (e.touches.length == 1) {
   console.log("单滑了")
 return
  }
  console.log('双手指触发开始')
 // 注意touchstartCallback 真正代码的开始
  // 一开始我并没有这个回调函数,会出现缩小的时候有瞬间被放大过程的bug
  // 当两根手指放上去的时候,就将distance 初始化。
  let xMove = e.touches[1].clientX - e.touches[0].clientX;
  let yMove = e.touches[1].clientY - e.touches[0].clientY;
  let distance = Math.sqrt(xMove * xMove + yMove * yMove);
 this.setData({
 'touch.distance': distance,
  })
 },
 touchMoveHandle(e) {
  let touch = this.data.touch
 // 单手指缩放我们不做任何操作
 if (e.touches.length == 1) {
   console.log("单滑了");
 return
  }
  console.log('双手指运动开始')
  let xMove = e.touches[1].clientX - e.touches[0].clientX;
  let yMove = e.touches[1].clientY - e.touches[0].clientY;
 // 新的 ditance
  let distance = Math.sqrt(xMove * xMove + yMove * yMove);
  let distanceDiff = distance - touch.distance;
  let newScale = touch.scale + 0.005 * distanceDiff
 // 为了防止缩放得太大,所以scale需要限制,同理最小值也是
 if (newScale >= 2) {
   newScale = 2
  }
 if (newScale <= 0.6) {
   newScale = 0.6
  }
  let scaleWidth = newScale * touch.baseWidth
  let scaleHeight = newScale * touch.baseHeight
 // 赋值 新的 => 旧的
 this.setData({
 'touch.distance': distance,
 'touch.scale': newScale,
 'touch.scaleWidth': scaleWidth,
 'touch.scaleHeight': scaleHeight,
 'touch.diff': distanceDiff
  })
 },
 load: function (e) {
 // bindload 这个api是<image>组件的api类似<img>的onload属性
 this.setData({
 'touch.baseWidth': e.detail.width,
 'touch.baseHeight': e.detail.height,
 'touch.scaleWidth': e.detail.width,
 'touch.scaleHeight': e.detail.height
  });
 }
})

然后将新获得的图片宽度和高度赋值给图片即可实现滑动缩放

wxml:

<image mode='scaleToFill' src='../../../images/01.jpg'
bindtouchstart='touchStartHandle'
bindtouchmove='touchMoveHandle'
bindload='load'
style="width: {{ touch.scaleWidth }}px;
height: {{ touch.scaleHeight }}px"></image>

最后,通过手机预览,就会发现已达到预想的效果!

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
jquery中动态效果小结
Dec 16 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
js生成缩略图后上传并利用canvas重绘
May 15 Javascript
JavaScript获取文本框内选中文本的方法
Feb 20 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
node中间层实现文件上传功能
Jun 11 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 #Javascript
微信小程序提交form操作示例
Dec 30 #Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 #Javascript
详解vue 兼容IE报错解决方案
Dec 29 #Javascript
玩转Koa之koa-router原理解析
Dec 29 #Javascript
Bootstrap Paginator+PageHelper实现分页效果
Dec 29 #Javascript
玩转Koa之核心原理分析
Dec 29 #Javascript
You might like
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python的多重继承的理解
2017/08/06 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
小学运动会口号
2014/06/07 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python