この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 序文 一般的な電子教室の電子黒板。 この記事の特徴: ネイティブJS 最小限のコード例 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>ドキュメント</title> </head> <本文> <キャンバスid="キャンバス"></キャンバス> <スクリプト> c = document.getElementById('canvas'); c.width = ウィンドウの内側の幅; c.height = ウィンドウの内側の高さ; ctx = c.getContext('2d') とします。 // 黒板を1枚描く ctx.fillStyle = "黒"; ctx.fillRect(0,0,600,300); // フラグを押す let onoff = false, 古いx = -10、 古い = -10; // 色を設定します let linecolor = "white"; // 線の幅を設定する let linw = 4; // マウスイベントを追加 // 押す c.addEventListener('mousedown', event => { オンオフ = true; // Position - 10 は位置を修正し、描画をマウス ポインターの上部に配置します。oldx = event.pageX - 10; 古い = イベント.ページY - 10; }、間違い); // 移動 c.addEventListener('mousemove', event => { if(onoff == true){ newx = event.pageX - 10 とします。 newy = イベント.pageY - 10; // 描画 ctx.beginPath(); ctx.moveTo(oldx,oldy); ctx.lineTo(newx,newy); ctx.strokeStyle = 線の色; ctx.lineWidth = linw; ctx.lineCap = "丸い"; ctx.stroke(); // 移動するたびに座標位置を更新します。oldx = newx、 古いもの = 新しいもの; } }、 真実); // ポップアップ c.addEventListener('mouseup', ()=> { オンオフ = false; }、間違い); </スクリプト> </本文> </html> 結果 コードの説明 アイデア 1. マウスを押して描画を開始します。マウスダウンイベント。 コードの説明 全体的な考え方は次のとおりです。マウスを押して移動スイッチをトリガーし、移動後に線の記録を開始します (移動後の座標 - 移動前の座標を使用して線を描画します)。各移動によって古い座標が更新されます。マウスを離した後、移動スイッチを離します。 1. 描画を移動する効果はマウスが押されたときにのみ発動されるため、状態判定を追加する必要があります。 カプセル化モジュール <キャンバスid="キャンバス"></キャンバス> <スクリプト> クラス Board{ コンストラクタ(canvasName = 'canvas', data = new Map([ ["オンオフ", false], ["古いx", -10], ["古い", -10], ["fillStyle", "黒"], ["線の色", "白"], ["線幅", 4], ["lineCap", "round"], ["キャンバス幅", ウィンドウの内側の幅], ["キャンバスの高さ", window.innerHeight] ])){ // this.data = データ; this.c = document.getElementById(キャンバス名); this.ctx = this.c.getContext('2d'); onoff をデータとして取得します。 this.oldx = data.get("oldx"); this.oldy = data.get("oldy"); 行の色を取得します。 行幅を取得します。 行頭文字をデータとして取得します。 this.c.width = data.get("キャンバス幅"); this.c.height = data.get("キャンバス高さ"); this.ctx.fillStyle = data.get("fillStyle"); ctx の塗りつぶし矩形を 0,0,600,300 に設定します。 } イベント操作(){ // マウスイベントを追加 // 押す this.c.addEventListener('mousedown', event => { this.onoff = true; // Position - 10 は位置を修正し、描画をマウス ポインターの上部に配置します。this.oldx = event.pageX - 10; this.oldy = イベント.pageY - 10; }、間違い); // 移動 this.c.addEventListener('mousemove', event => { if(this.onoff == true){ newx = event.pageX - 10 とします。 newy = イベント.pageY - 10; // 描画 this.ctx.beginPath(); this.ctx.moveTo(this.oldx,this.oldy); this.ctx.lineTo(newx,newy); this.ctx.strokeStyle = this.lineColor; this.ctx.lineWidth は、 this.lineWidth の略です。 this.ctx.lineCap = this.lineCap; this.ctx.stroke(); // 移動するたびに座標位置を更新します。this.oldx = newx, this.oldy = newy; } }、 真実); // ポップアップ this.c.addEventListener('mouseup', ()=> { this.onoff = false; }、間違い); } } ボードを新しいボード()にします。 ボードイベント操作(); </スクリプト> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQLデータベースを誤って削除した後にデータを回復するための手順
>>: テキストまたはJSONを返すようにnginxを設定する方法
目次背景インスピレーションは人生から生まれる速達配送の最適化原則GaussDB の最適化 (MySQ...
目次フラット化とは何か再帰トストリング減らすアンダーコア_.平坦化_。連合_。違い要約するフラット化...
以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...
目次1. プロパティを型リストに制限する2. デフォルトのコンテンツと拡張ポイント3. ネストされた...
Linux バージョンに関する情報を表示および解釈するのは、見た目よりも少し複雑です。単純なバージョ...
1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...
この記事の例では、円形の水のアニメーションを実現するためのキャンバスの具体的なコードを参考までに共有...
テーブルの基本構文<table>...</table> - テーブルを定義し...
この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...
序文開発プロセスでは、ブラウザレベルでユーザーが実行した操作を記憶するなど、同様の要件に遭遇すること...
目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...
序文MySQL のマスター/スレーブ レプリケーション関係は、厳密には「同期」または「マスター/スレ...
実施効果: 1. count(1) と count(*)テーブル内のデータ量が多い場合、テーブルを分...
1. 背景同社のプロジェクトは、これまでは手動で Maven でパッケージ化し、サーバーにアップロ...
MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...