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


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实现刷新iframe的方法汇总
Apr 27 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
js 动态给元素添加、移除事件的实现方法
Jul 19 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
canvas实现图像截取功能
Feb 06 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 Javascript
原生js实现自定义滚动条组件
Jan 20 Javascript
JS Canvas接口和动画效果大全
Apr 29 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
帅气的琦玉老师
2020/03/02 日漫
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
高级销售员求职信
2013/10/25 职场文书
党委书记岗位职责
2013/11/24 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
Python天气语音播报小助手
2021/09/25 Python