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


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 相关文章推荐
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
JS模板实现方法
Apr 03 Javascript
JavaScript在XHTML中的用法详解
Apr 11 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
JavaScript实现的九种排序算法
Mar 04 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 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
写一个用户在线显示的程序
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
js获取事件源及触发该事件的对象
2013/10/24 Javascript
js分页代码分享
2014/04/28 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
Javascript的this详解
2019/03/23 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python的净值数据接口调用示例分享
2016/03/15 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
博士生专家推荐信
2014/09/26 职场文书
办理护照工作证明
2014/10/10 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技