背景:プロジェクト中、WeChat アプレットに手書き署名コンポーネントを実装する必要があります。手書き署名を実装するための WeChat ミニプログラムをインターネットで検索しましたが、結果は理想的ではありませんでした。実際のアプリケーションでは、多数のベジェ曲線をリアルタイムで計算するため、遅延が発生する可能性があります。効果は理想的ではありません。つまり、一歩引いて考えると、ペン先や手書きのシミュレーション効果は必要ありません。必要なのは簡単な手書きの署名だけです。 必要:ユーザーはWeChatミニプログラムに署名を手書きできるようになります。 コンポーネント化する必要があります。 効果 1. アイデアWeChat アプレットでは、キャンバス コンポーネントを使用して実装します。ユーザー入力をペンとして考えてみましょう。私たちが描く署名は多くの点から構成されます。しかし、単純な点では線をうまく形成できません。点は線で結ばれる必要もあります。以下は実装コードです。 2. 実装1. ページとスタイルwxml ここでのキャンバス コンポーネントは最新の使用法です。 <ビュークラス="ダッシュボックス"> <view class="btnList"> <van-button size="small" bind:click="clearCanvas">クリア</van-button> </ビュー> <view class="handCenter"> <キャンバス クラス="手書き" スクロールを無効にする="{{true}}" id="手書き" bindtouchstart="スケール開始" bindtouchmove="スケール移動" bindtouchend="スケール終了" bindtap="mouseDown" タイプ = "2d" > </キャンバス> </ビュー> </ビュー> wxss .btnリスト{ 幅: 95%; マージン:0 自動; } 。手書き{ 背景: #fff; 幅: 95%; 高さ:80vh; マージン:0 自動 } 2. 初期化カスタム コンポーネントで使用されるため、キャンバスを取得するときに this ポイントの問題に注意してください。 SelectorQuery の In メソッドを呼び出さない場合、この時点では親コンポーネントを指しているため、カスタム コンポーネント内のキャンバスを取得できません。 成分({ /** * コンポーネントの初期データ */ データ: { キャンバス名:'#handWriting', ctx:''、 キャンバス幅:0, キャンバスの高さ:0, 開始点:{ x:0, y:0, }, 選択色: '黒', lineColor: '#1A1A1A', // 色 lineSize: 1.5, // 複数に注意してください radius: 5, // 円の半径}, 準備ができて(){ キャンバス名を this.data.canvasName とします。 let query = wx.createSelectorQuery().in(this); //カスタムコンポーネントのSelectQueryオブジェクトを取得します。query.select(canvasName) .fields({ ノード: true, サイズ: true }) .exec((res) => { const キャンバス = res[0].node; const ctx = canvas.getContext('2d'); //デバイスのピクセル比を取得します。const dpr = wx.getSystemInfoSync().pixelRatio; // 手書きのずれを防ぐためにキャンバスのサイズを拡大縮小して設定します。canvas.width = res[0].width * dpr; キャンバスの高さをres[0]の高さに合わせる。 ctx.scale(dpr, dpr); ctx.lineJoin="丸め"; this.setData({ctx}); }); クエリ.select('.handCenter').boundingClientRect(rect => { console.log('rect', rect); this.setData({ キャンバス幅:rect.width、 キャンバスの高さ:rect.height }); }).exec(); }, //次のコードを省略します... }); 3. クリックすると成分({ //上記のコードを省略します... メソッド: { スケール開始(イベント){ event.type != 'touchstart' の場合は false を返します。 現在のポイントを{ x: イベント.タッチ[0].x、 y: イベント.タッチ[0].y } this.drawCircle(現在のポイント); this.setData({startPoint:currentPoint}); }, drawCircle(point){//ここではポイントを担当します。let ctx = this.data.ctx; ctx.beginPath(); ctx.fillStyle = this.data.lineColor; // 手書きの太さは円の大きさによって決まります ctx.arc(point.x, point.y, this.data.radius, 0 , 2 * Math.PI); ctx.fill(); ctx.closePath(); }, //次のコードを省略します... } }) 4. 署名成分({ //上記のコードメソッドを省略:{ 描画線(ソースポイント、ターゲットポイント){ ctx = this.data.ctx; とします。 ターゲットポイントに円を描画します。 ctx.beginPath(); ctx.strokeStyle = this.data.lineColor; ctx.lineWidth = this.data.radius * 2; //ここで 2 倍する理由は、線の太さが円の直径と等しくなるようにするためです。ctx.moveTo(sourcePoint.x, sourcePoint.y); ctx.lineTo(ターゲットポイント.x、ターゲットポイント.y); ctx.stroke(); ctx.closePath(); }, clearCanvas(){//キャンバスをクリアします let ctx = this.data.ctx; ctx.rect(0, 0, this.data.canvasWidth, this.data.canvasHeight); ctx.fillStyle = '#FFFFFF'; ctx.fill(); } } }) 結論この手書きの署名は、ビジネス上の緊急時のみに使用されます。最適化したい場合は、ペンストロークのシミュレーションと手書きのシミュレーションから始めることができます。解決する必要がある唯一の問題は、リアルタイムシミュレーション中の遅延です。 WeChatミニプログラムに簡単な手書き署名コンポーネントを実装する方法についての記事はこれで終わりです。WeChatミニプログラムの手書き署名コンポーネントに関するより関連性の高いコンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: テキスト ファイルの並べ替えに役立つ Awk コマンドラインまたはスクリプト (推奨)
>>: Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する
Macでデータベースを操作する際に個人が遭遇するデータベース起動の問題の簡単な記録1. Apple-...
目次要件の説明問題の説明問題分析問題解決質問の拡張要件の説明このプロジェクトでは、まずユーザーが質問...
企業の Web サイト、個人のブログ、ショッピング Web サイト、ゲーム Web サイトなど、どの...
序文データベースでは、一部のデータ テーブルとデータは latin1 であり、一部のデータ テーブル...
この記事では、主に HTML + CSS を使用してテキストの折りたたみ特殊効果を実現する例を紹介し...
序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...
前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...
URL 書き換えは、Web サイトの優先ドメインを決定するのに役立ちます。同じリソース ページの複数...
1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...
目次成果を達成する利用可能なプラグインの紹介ニーズに応じてプラグインを選択するプラグインのインストー...
背景何が起こったかというと、Luzhu は偶然、宇宙で最高の外部スピーカーを備えた携帯電話について知...
このチュートリアルでは、UbuntuにMySQL 5.7.10を手動でインストールする手順を参考まで...
1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...
CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...
概要この記事は、ゲームビジネスアーキテクチャに関連するコンテンツの紹介から始まります。ゲームビジネス...