欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-02-21 16:21:29
本文实例讲述了微信小程序实现通过双向滑动缩放图片大小的方法。分享给大家供大家参考,具体如下: 在做小程序开发的过程中,后端传来一张图片地图,需要实现双手指滑动,使图片缩放...

本文实例讲述了微信小程序实现通过双向滑动缩放图片大小的方法。分享给大家供大家参考,具体如下:

在做小程序开发的过程中,后端传来一张图片地图,需要实现双手指滑动,使图片缩放,最终得出了一下代码:

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>

最后,通过手机预览,就会发现已达到预想的效果!

希望本文所述对大家微信小程序开发有所帮助。