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


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 相关文章推荐
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
Feb 27 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
Jun 07 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
jquery实现弹窗功能(窗口居中显示)
Feb 27 Javascript
jquery获取select,option所有的value和text的实例
Mar 06 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
vue路由对不同界面进行传参及跳转的总结
Apr 20 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
element多个表单校验的实现
May 27 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
PHP面向对象法则
2012/02/23 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
python为什么要安装到c盘
2020/07/20 Python
详解Python模块化编程与装饰器
2021/01/16 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
企业环保标语
2014/06/10 职场文书
演讲稿开场白台词
2014/08/25 职场文书
大学生交通专业求职信
2014/09/01 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
好员工观后感
2015/06/17 职场文书
2016猴年春节问候语
2015/11/11 职场文书
小学教代会开幕词
2016/03/04 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python