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


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 相关文章推荐
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
微信小程序 数据绑定详解及实例
Oct 25 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
Vue中util的工具函数实例详解
Jul 08 Javascript
解决layui富文本编辑器图片上传无法回显的问题
Sep 18 Javascript
vue-property-decorator用法详解
Dec 12 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php 字符转义 注意事项
2009/05/27 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
英国日常交易网站:Wowcher
2018/09/04 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
"引用"与多态的关系
2013/02/01 面试题
公司企业表扬信
2014/01/11 职场文书
中学生运动会口号
2014/06/07 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript