目次
拖拽操作
手势识别
ドラッグ アンド ドロップ操作
ジェスチャー認識
ホームページ WeChat アプレット ミニプログラム開発 ミニプログラム開発の基礎 スライド操作 (10)

ミニプログラム開発の基礎 スライド操作 (10)

Apr 25, 2017 am 09:45 AM

実際のモバイルアプリケーションの操作方法では、最も一般的なのはスライド操作です。左右にスライドしてページを切り替えたり、指を広げて写真を拡大したり、すべてスライド操作で行います。

WeChat アプレットによってデフォルトで提供される関連イベントは次のとおりです。

ミニプログラム開発の基礎 スライド操作 (10)

タッチ関連の操作イベント

tap はクリック操作に対応し、longtap も長押し操作をサポートするために提供されます。これらは比較的単純であり、さらに Tell する必要はありません。
touchmoveはスライド操作に対応しており、bindtouchmoveを通じてスライド操作に対応できます。

//wxml
<view id="id" bindtouchmove="handletouchmove" style = "width : 100px; height : 100px; background : #167567;">
</view>

//js
Page({
  handletouchmove: function(event) {
    console.log(event)
  },
})
ログイン後にコピー
bindtouchmove即可响应滑动操作。

//wxml
<view id="id" class = "ball" bindtouchmove="handletouchmove" style = "width : 60px; height : 60px; background : #545345;">
</view>

//wxss
.ball {
  box-shadow:2px 2px 10px #AAA;
  border-radius: 20px;
  position: absolute; 
}

//js
Page({
  handletouchmove: function(event) {
    console.log(event)
  },
})
ログイン後にコピー

当按住view标签并滑动鼠标时,会不停的触发滑动事件,直到放开鼠标,当鼠标移出view标签区域后依然会触发事件

拖拽操作

通过监听滑动事件,可以实现一些实用的功能,比如用过iphone的用户都知道assistivetouch,一个桌面上的快捷按钮,可以将按钮拖动到桌面的任意位置。为了方便,这里就用一个圆形来代表该按钮。

//wxml
<view id="id" class = "ball" bindtouchmove="handletouchmove" style = "width : 60px; height : 60px; background : #545345; top:{{ballTop}}px; left: {{ballLeft}}px">
</view>

//js
Page({
  data: {
    ballTop: 0,
    ballLeft: 0,
  },
  handletouchmove: function(event) {
    console.log(event)
  },
})
ログイン後にコピー

ミニプログラム開発の基礎 スライド操作 (10)

视图跟随


好吧,按钮丑了点,这不是重点。拖拽操作的实现思路也很简单,当触发滑动事件时,event对象会包含当前触摸位置的坐标信息,可以通过event.touches[0].pageXevent.touches[0].pageY 来获取,为什么touches是数组呢,答案是为了支持多点触控(在电脑上不知道如何模拟多点触控)。接下来将按钮的位置设置为触摸位置,应该就能实现预期效果了,让我们试试看。

在Page中定义按钮的位置数据ballBottom和ballRight,并绑定到view的对应属性中。

handletouchmove: function(event) {
  console.log(event)
  this.setData ({
    ballTop: event.touches[0].pageY,
    ballLeft: event.touches[0].pageX,
  });
},
ログイン後にコピー

接下来在handletouchmove方法中更新按钮的位置数据

Page({
  data: {
    ballTop: 0,
    ballLeft: 0,
    screenHeight:0,
    screenWidth:0

  },
  onLoad: function () {
      //获取屏幕宽高
    var _this = this;
    wx.getSystemInfo({
     success: function (res) {
        _this.setData({
          screenHeight: res.windowHeight,
          screenWidth: res.windowWidth,
        });
      }
    });
  },
  handletouchmove: function(event) {
    console.log(event)
    let pageX = event.touches[0].pageX;
    let pageY = event.touches[0].pageY;
    //屏幕边界判断
    if (pageX < 30 || pageY < 30)
      return;
    if (pageX > this.data.screenWidth - 30)
      return;
    if (pageY > this.data.screenHeight - 30)
      return;
    this.setData ({
      ballTop: event.touches[0].pageY - 30,
      ballLeft: event.touches[0].pageX - 30,
    });
  },
})
ログイン後にコピー

运行发现基本可以实现效果,不过有两个问题,一是会将按钮拖出屏幕边缘,二是按钮始终在鼠标右下方。
接下来加入对屏幕边界的判断并对按钮位置进行修正。其中屏幕大小可以通过wx.getSystemInfo来获取。
完整代码如下:

//wxml
<view id="id" class = "ball" bindtap = "handletap" bindtouchstart = "handletouchtart" bindtouchmove="handletouchmove" style = "width : 100%px; height : 40px;">
{{text}}
</view>

//js
Page({
  data: {
    lastX: 0,
    lastY: 0,
    text : "没有滑动",
  },
  handletouchmove: function(event) {
    console.log(event)
    let currentX = event.touches[0].pageX
    let currentY = event.touches[0].pageY

    console.log(currentX)
    console.log(this.data.lastX)
    let text = ""
    if ((currentX - this.data.lastX) < 0)
      text = "向左滑动"
    else if (((currentX - this.data.lastX) > 0))
      text = "向右滑动"

    //将当前坐标进行保存以进行下一次计算
    this.data.lastX = currentX
    this.data.lastY = currentY
    this.setData({
      text : text,
    });
  },

  handletouchtart:function(event) { 
    console.log(event)
    this.data.lastX = event.touches[0].pageX
    this.data.lastY = event.touches[0].pageY
  },
  handletap:function(event) {
    console.log(event)
  },
})
ログイン後にコピー

再次运行,一切ok。

手势识别

通过处理滑动操作可以识别各种手势操作,如左右滑动等。思路也很简单,通过绑定touchstart和touchmove事件,然后对坐标信息进行识别计算即可(如current.PageX - last.PageX < 0则认为是向左滑动)

 handletouchmove: function(event) {
    console.log(event)
    let currentX = event.touches[0].pageX
    let currentY = event.touches[0].pageY
    let tx = currentX - this.data.lastX
    let ty = currentY - this.data.lastY
    let text = ""
    //左右方向滑动
    if (Math.abs(tx) > Math.abs(ty)) {
      if (tx < 0)
        text = "向左滑动"
      else if (tx > 0)
        text = "向右滑动"
    }
    //上下方向滑动
    else {
      if (ty < 0)
        text = "向上滑动"
      else if (ty > 0)
        text = "向下滑动"
    }

    //将当前坐标进行保存以进行下一次计算
    this.data.lastX = currentX
    this.data.lastY = currentY
    this.setData({
      text : text,
    });
  },
ログイン後にコピー

运行程序,当向左滑动时会view会显示"向左滑动", 向右同理。

同时识别左右滑动和上下互动
有时候希望同时识别左右和上下滑动,可以通过比较X轴上的差值和Y轴上的差值,较大的差值为滑动方向。

Page({
  data: {
    lastX: 0,
    lastY: 0,
    text : "没有滑动",
    currentGesture: 0,
  },
  handletouchmove: function(event) {
    console.log(event)
    if (this.data.currentGesture != 0){
      return
    }
    let currentX = event.touches[0].pageX
    let currentY = event.touches[0].pageY
    let tx = currentX - this.data.lastX
    let ty = currentY - this.data.lastY
    let text = ""
    //左右方向滑动
    if (Math.abs(tx) > Math.abs(ty)) {
      if (tx < 0) {
        text = "向左滑动"
        this.data.currentGesture = 1
      }
      else if (tx > 0) {
        text = "向右滑动"
        this.data.currentGesture = 2
      }

    }
    //上下方向滑动
    else {
      if (ty < 0){
        text = "向上滑动"
        this.data.currentGesture = 3

      }
      else if (ty > 0) {
        text = "向下滑动"
        this.data.currentGesture = 4
      }

    }

    //将当前坐标进行保存以进行下一次计算
    this.data.lastX = currentX
    this.data.lastY = currentY
    this.setData({
      text : text,
    });
  },

  handletouchtart:function(event) { 
    console.log(event)
    this.data.lastX = event.touches[0].pageX
    this.data.lastY = event.touches[0].pageY
  },
  handletouchend:function(event) {
    console.log(event)
    this.data.currentGesture = 0
    this.setData({
      text : "没有滑动",
    });
  },
})
ログイン後にコピー

在实际应用中,当某种手势被触发后,在用户没有放开鼠标或手指前,会一直识别为该手势。比如当用户触发左滑手势后,这时再向下滑动,仍要按照左滑手势来处理。
可以定义一个标记来记录第一次识别到的手势,如果已识别出手势,后续的滑动操作就可以忽略,直到用户放开鼠标或手指。放开鼠标或手指操作可以通过绑定handletouchend view ラベルを押したままマウスをスライドすると、マウスを放すまでスライド イベントが継続的にトリガーされます。

マウスが view の外に出ると、スライド イベントが継続的にトリガーされます。コード>ラベル領域でも、イベント

をトリガーします。

ドラッグ アンド ドロップ操作

スライド イベントをリッスンすることで、いくつかの実用的な機能を実装できます。たとえば、iPhone を使用したことのあるユーザーは、ボタンをドラッグしてデスクトップ上のショートカット ボタンを認識できます。デスクトップ上の任意の場所。便宜上、ボタンを表すために円が使用されます。
rrreeeミニプログラム開発の基礎 スライド操作 (10)フォローするにはビューを表示

🎜🎜OK、ボタンは醜いポイント、それは重要ではありません。ドラッグ アンド ドロップ操作の実装アイデアも非常にシンプルで、スライド イベントがトリガーされると、イベント オブジェクトには現在のタッチ位置の座標情報が含まれ、event.touches[0] を通じて渡すことができます。 .pageXevent.touches[0].pageY を実行すると、touches が配列である理由がわかります (マルチタッチをシミュレートする方法がわかりません)。コンピュータ上で)。次に、ボタンの位置をタッチ位置に設定します。これで目的の効果が得られるはずです。試してみましょう。 🎜🎜ページ内でボタンの位置データ ballBottom と ballRight を定義し、ビューの対応する属性にバインドします。 🎜rrreee🎜 次に、handletouchmove メソッドでボタンの位置データを更新します 🎜rrreee🎜 実行してみると、基本的には効果が得られることが分かりましたが、問題が 2 つあります。ボタンは画面の端からドラッグされます。もう 1 つは、ボタンが常にマウスの右下にあることです。 🎜次に画面境界の判定を追加し、ボタン位置を修正します。画面サイズは wx.getSystemInfo で取得できます。 🎜完全なコードは次のとおりです: 🎜rrreee🎜 もう一度実行すると、すべて問題ありません。 🎜

ジェスチャー認識

🎜 左右スライドなどのスライド操作を処理することで、様々なジェスチャー操作を認識できます。アイデアも非常にシンプルで、touchstart イベントと touchmove イベントをバインドして、座標情報 (current.PageX - last.PageX view に「左にスワイプ」と表示され、右も同様です。 🎜🎜🎜左右のスライドと上下のスライドを同時に識別します🎜🎜左右のスライドと上下のスライドを同時に認識したい場合があります。X 軸とY 軸上の差。大きい方の違いはスライド方向です。 🎜rrreee🎜実際のアプリケーションでは、特定のジェスチャがトリガーされると、ユーザーがマウスまたは指を放すまでそのジェスチャが認識されます。たとえば、ユーザーが左スワイプ ジェスチャをトリガーしてから下にスワイプした場合でも、ユーザーは引き続き左スワイプ ジェスチャに従う必要があります。 🎜最初に認識されたジェスチャを記録するためにマークを定義できます。ジェスチャが認識された場合、ユーザーがマウスまたは指を放すまで、その後のスライド操作は無視されます。マウスまたは指の操作を放すことは、handletouchend イベントをバインドすることで処理できます。 🎜rrreee🎜🎜マルチタッチ🎜🎜 マルチタッチはテストするために実機が必要で、私のappidはまだ申請中であるため、説明は後回しにするしかありません。たとえば、指 🎜 を開いた場合、左側のタッチ ポイントが左側にスライドし、右側のタッチ ポイントが移動する方向を決定できます。右にある場合、🎜 と判断できます。 指を開いて操作します。 🎜

以上がミニプログラム開発の基礎 スライド操作 (10)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

uniapp で小規模なプログラムの開発と公開を実装する方法 uniapp で小規模なプログラムの開発と公開を実装する方法 Oct 20, 2023 am 11:33 AM

uni-app でミニ プログラムを開発および公開する方法 モバイル インターネットの発展に伴い、ミニ プログラムはモバイル アプリケーション開発の重要な方向性になりました。クロスプラットフォーム開発フレームワークとして、uni-app は WeChat、Alipay、Baidu などの複数の小規模プログラム プラットフォームの開発を同時にサポートできます。以下では、uni-app を使用して小さなプログラムを開発および公開する方法を詳しく紹介し、具体的なコード例をいくつか示します。 1. 小さなプログラムを開発する前の準備. uni-app を使用して小さなプログラムを開発する前に、いくつかの準備を行う必要があります。

ミニプログラム開発におけるPHPページジャンプとルーティング管理 ミニプログラム開発におけるPHPページジャンプとルーティング管理 Jul 04, 2023 pm 01:15 PM

ミニ プログラム開発における PHP のページ ジャンプとルーティング管理 ミニ プログラムの開発が急速に進むにつれ、PHP とミニ プログラム開発を組み合わせる開発者が増えています。小規模プログラムの開発では、ページ ジャンプとルーティング管理は非常に重要な部分であり、開発者がページ間の切り替えやナビゲーション操作を実現するのに役立ちます。一般的に使用されるサーバーサイド プログラミング言語として、PHP はミニ プログラムと適切に対話し、データを転送できます。ミニ プログラムにおける PHP のページ ジャンプとルーティング管理について詳しく見てみましょう。 1. ページジャンプベース

ミニプログラム開発におけるPHP権限管理とユーザーロール設定 ミニプログラム開発におけるPHP権限管理とユーザーロール設定 Jul 04, 2023 pm 04:48 PM

ミニ プログラム開発における PHP の権限管理とユーザー ロール設定 ミニ プログラムの普及と適用範囲の拡大に伴い、ユーザーからはミニ プログラムの機能とセキュリティに対する要求が高まっています。その中でも権限管理とユーザー ロール設定は、ミニ プログラムのセキュリティを確保する上で重要な部分です。ミニプログラムでの権限管理やユーザーロールの設定にPHPを利用することで、ユーザーのデータやプライバシーを効果的に保護することができますので、その実装方法を紹介します。 1. 権限管理の実装 権限管理とは、ユーザーの ID と役割に基づいてさまざまな操作権限を付与することを指します。小さくて

PHP データのキャッシュと小規模プログラム開発におけるキャッシュ戦略 PHP データのキャッシュと小規模プログラム開発におけるキャッシュ戦略 Jul 05, 2023 pm 02:57 PM

ミニ プログラム開発における PHP データ キャッシュとキャッシュ戦略 ミニ プログラムの急速な開発に伴い、より多くの開発者がミニ プログラムのパフォーマンスと応答速度を向上させる方法に注目し始めています。重要な最適化方法の 1 つは、データ キャッシュを使用してデータベースや外部インターフェイスへの頻繁なアクセスを減らすことです。 PHP では、さまざまなキャッシュ戦略を使用してデータ キャッシュを実装できます。この記事では、PHP におけるデータ キャッシュの原理を紹介し、いくつかの一般的なキャッシュ戦略のサンプル コードを提供します。 1. データ キャッシュの原理 データ キャッシュとは、データをメモリに保存することを指します。

ミニプログラム開発における PHP のセキュリティ保護と攻撃の防止 ミニプログラム開発における PHP のセキュリティ保護と攻撃の防止 Jul 07, 2023 am 08:55 AM

ミニ プログラム開発における PHP のセキュリティ保護と攻撃の防止 モバイル インターネットの急速な発展に伴い、ミニ プログラムは人々の生活の重要な部分になりました。 PHP は、強力で柔軟なバックエンド開発言語として、小規模プログラムの開発にも広く使用されています。ただし、セキュリティの問題は、プログラム開発において常に注意が必要な側面です。この記事では、小規模プログラム開発における PHP のセキュリティ保護と攻撃防止に焦点を当て、いくつかのコード例を示します。 XSS (クロスサイト スクリプティング攻撃) の防止 XSS 攻撃とは、ハッカーが Web ページに悪意のあるスクリプトを挿入することを指します。

PHPで開発したドロップダウンメニューをWeChatアプレットに実装する方法 PHPで開発したドロップダウンメニューをWeChatアプレットに実装する方法 Jun 04, 2023 am 10:31 AM

今日は、PHP で開発されたドロップダウン メニューを WeChat アプレットに実装する方法を学びます。 WeChat ミニ プログラムは、ユーザーがダウンロードしてインストールすることなく WeChat で直接使用できる軽量のアプリケーションであり、非常に便利です。 PHP は非常に人気のあるバックエンド プログラミング言語であり、WeChat ミニ プログラムとうまく連携する言語です。 PHP を使用して WeChat ミニ プログラムのドロップダウン メニューを開発する方法を見てみましょう。まず、PHP、WeChat アプレット開発ツール、サーバーなどの開発環境を準備する必要があります。それから私たちは

ミニプログラム開発における PHP ページのアニメーション効果とインタラクションデザイン ミニプログラム開発における PHP ページのアニメーション効果とインタラクションデザイン Jul 04, 2023 pm 11:01 PM

ミニ プログラム開発における PHP ページ アニメーション効果とインタラクション デザインの概要: ミニ プログラムは、モバイル デバイス上で実行され、ネイティブ アプリケーションと同様のエクスペリエンスを提供できるアプリケーションです。ミニ プログラムの開発では、一般的に使用されるバックエンド言語として PHP を使用して、ミニ プログラム ページにアニメーション効果やインタラクティブなデザインを追加できます。この記事では、一般的に使用される PHP ページのアニメーション効果とインタラクション デザインをいくつか紹介し、コード例を添付します。 1. CSS3 アニメーション CSS3 は、さまざまなアニメーション効果を実現するための豊富なプロパティとメソッドを提供します。そして小さいところでは

小規模なプログラム開発における PHP エラー処理と例外ログ 小規模なプログラム開発における PHP エラー処理と例外ログ Jul 04, 2023 am 11:16 AM

ミニ プログラム開発における PHP エラー処理と例外ログ ミニ プログラムの人気が高まるにつれ、ミニ プログラム バックエンドの開発に PHP 言語を使用する開発者が増えています。開発中、エラー処理と例外ログは非常に重要です。この記事では、小規模なプログラム開発における PHP エラーの処理方法と例外ログの記録方法を紹介し、対応するコード例を示します。 1. PHP エラー処理 PHP でのエラー報告設定。error_reporting と display_err を変更できます。

See all articles