zoukankan      html  css  js  c++  java
  • 微信小程序中实现手指缩放图片

    上代码

    Page({
        data: {
            touch: {
                distance: 0,
                scale: 1,
                baseWidth: null,
                baseHeight: null,
                scaleWidth: null,
                scaleHeight: null
            }
        },
        touchstartCallback: function(e) {
            // 单手指缩放开始,也不做任何处理 if(e.touches.length == 1) 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,
            })
        },
        touchmoveCallback: function(e) {
            let touch = this.data.touch
            // 单手指缩放我们不做任何操作 if(e.touches.length == 1) 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
            })
        },
        bindload: 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代码如下

    <view class="container">
        <view bindtouchmove="touchmoveCallback" bindtouchstart="touchstartCallback">
            <image src="../../resources/pic/cat.jpg" style=" {{ touch.scaleWidth }}px;height: {{ touch.scaleHeight }}px" bindload="bindload"></image>
        </view>
    </view>
  • 相关阅读:
    Magento前台获取属性(自主获取)
    Magento PayPal提示订单地址无效解决方案
    Magento导入产品图片名称问题处理
    50个提升PHP性能的方法
    PHP开发者常犯的10个MySQL错误
    magento中给form添加输入验证
    PHP执行时间计算
    获得Magento全部Api方法
    Android 开发环境更新方法
    Android 网络通信开源框架 Volley JAR包的生成(一)
  • 原文地址:https://www.cnblogs.com/yangshuzhong/p/11528127.html
Copyright © 2011-2022 走看看