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


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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
JS 判断undefined的实现代码
Nov 26 Javascript
避免 showModalDialog 弹出新窗体的原因分析
May 31 Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
js选项卡的实现方法
Feb 09 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
Javascript刷新页面的实例
Sep 23 Javascript
webpack配置打包后图片路径出错的解决
Apr 26 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
微信小程序使用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/03 冲泡冲煮
第十五节--Zend引擎的发展
2006/11/16 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
python绘制热力图heatmap
2020/03/23 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
CLR与IL分别是什么含义
2016/08/23 面试题
ajax是什么及其工作原理
2012/02/08 面试题
工业学校毕业生自荐书
2014/01/03 职场文书
运动会的口号
2014/06/09 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js