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


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 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 Javascript
详细探究ES6之Proxy代理
Jul 22 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
Bootstrap Table使用心得总结
Nov 29 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 Javascript
web前端vue之CSS过渡效果示例
Jan 10 Javascript
原生js+css调节音量滑块
Jan 15 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
世界上第一台立体声收音机
2021/03/01 无线电
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP防盗链代码实例
2014/08/27 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
js下弹出窗口的变通
2007/04/18 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Python实现Restful API的例子
2019/08/31 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
大学生素质拓展活动方案
2014/02/11 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
高中运动会前导词
2015/07/20 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书