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


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 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
js判断浏览器的比较全的代码
Feb 13 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
简单掌握JavaScript中const声明常量与变量的用法
May 21 Javascript
jQuery EasyUI开发技巧总结
Sep 26 jQuery
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 Javascript
AngularJS实现多级下拉框
Mar 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在线生成ico文件的代码
2007/10/09 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
JQuery 入门实例1
2009/06/25 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
vue.js中created方法作用
2018/03/30 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
军校本科大学生自我评价
2014/01/14 职场文书
出国导师推荐信
2014/01/16 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
个人借款担保书
2014/04/02 职场文书
委托公证书范本
2014/04/03 职场文书
2014年国庆标语
2014/06/30 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
优质服务标语口号
2015/12/26 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers