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


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 相关文章推荐
JS记录用户登录次数实现代码
Jan 15 Javascript
javascript面向对象之this关键词用法分析
Jan 13 Javascript
JavaScript lodash常见用法系列小结
Aug 24 Javascript
最细致的vue.js基础语法 值得收藏!
Nov 03 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
Jan 05 Javascript
基于JavaScript实现每日签到打卡轨迹功能
Nov 29 Javascript
使用rollup打包JS的方法步骤
Dec 05 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
js实现页面导航层级指示效果
Aug 25 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 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
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
python中PIL安装简单教程
2016/04/21 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
django model object序列化实例
2020/03/13 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
房地产项目建议书
2014/03/12 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
考察现实表现材料
2014/05/19 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
保洁员岗位职责
2015/02/04 职场文书
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电