ホームページ  >  記事  >  ウェブフロントエンド  >  WeChat アプレットに指ズーム画像を実装するためのサンプル コード

WeChat アプレットに指ズーム画像を実装するためのサンプル コード

亚连
亚连オリジナル
2018-05-30 16:24:311689ブラウズ

この記事では主に、WeChat アプレットに指ズーム画像を実装するためのサンプル コードを紹介し、参考として提供します。

その会社は WeChat アプレットを開発しています。PM は次のニーズを実現したいと考えています:

指を使って写真を拡大/縮小します。実際、この要件が実現する前は、WeChat 公式アカウントや WeChat ミニ プログラムにこの特殊効果を備えたネイティブ API があり、WeChat Moments もこの API を使用していることを知りませんでした。 wx.previewImage、それだけです。プレビュー画像。開発環境ではローカルコンピュータ上の画像はプレビューできないほか、実機上の画像やhttpサーバー上の画像もプレビュー可能で、ズーム機能も非常にスムーズです。 js を使用してこの機能を実装する方法について説明します。

まずソースコードにアクセスして、ステップバイステップで分析します:

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({
      &#39;touch.distance&#39;: distance,
      &#39;touch.scale&#39;: newScale,
      &#39;touch.scaleWidth&#39;: scaleWidth,
      &#39;touch.scaleHeight&#39;: scaleHeight,
      &#39;touch.diff&#39;: distanceDiff
    })
  },
  bindload: function(e) {
   // bindload 这个api是<image>组件的api类似<img>的onload属性
   this.setData({
     &#39;touch.baseWidth&#39;: e.detail.width,
     &#39;touch.baseHeight&#39;: e.detail.height,
     &#39;touch.scaleWidth&#39;: e.detail.width,
     &#39;touch.scaleHeight&#39;: e.detail.height
   })
  }
})

wxml ファイルは以下に対応するため、ここでは説明しません:

<view class="container">
  <view bindtouchmove="touchmoveCallback" bindtouchstart="touchstartCallback">
    <image src="../../resources/pic/cat.jpg" style="width: {{ touch.scaleWidth }}px;height: {{ touch.scaleHeight }}px" bindload="bindload"></image>
  </view>
</view>

上記は皆さんのためにまとめたものです。今後皆さんのお役に立つことを願っています。関連記事:vue Vue Projectsでアイコンアイコンを紹介する方法

以上がWeChat アプレットに指ズーム画像を実装するためのサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。