質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1378閲覧

mousemoveイベントで画像の拡大・縮小を行いたい

rei78087487

総合スコア12

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/30 07:43

流れ:

全体ソースコードより、

・右クリックでメニュー表示
・「画像」を選択
・ファイル選択
・要素をクリックした位置に画像が表示される
・画像をクリック→ドラッグ(mousemove)で画像を移動

やりたいこと:

画像をクリックした後にmousemoveイベントで画像の拡大・縮小を行いたい。

イメージとしてエクセルの画像操作と同じく
・画像中央をクリック→ドラッグ(mousemove)で画像の移動を行う(実装済み)
・画面端をクリック→ドラッグ(mousemove)で画像の拡大・縮小を行う。

問題点:

・上記2点は同じ要素かつイベントなので、一つの要素に2つの同じイベント処理が行えない(移動と拡大・縮小)
一つの要素の一部分のみにイベントを付加するという事は不可能?(この場合だと画面端)

参考記事:

vue.jsになりますが、参考記事がこちらです。
https://reon777.com/2020/03/24/js-change-height-by-mouse/

ご教示頂きたくお願い致します。

全体ソースコード:

https://codepen.io/mio-rei/pen/ExZBYEJ

ソースコード抜粋:

JavaScript

1// マウスダウン(要素の移動 初期動作) 2 const mouseDown = (e) => { 3 let t =e.target; 4 if(t.nodeName != 'TEXTAREA' && t.nodeName != 'IMG') return; 5 obj.elm = t; 6 obj.setOffset(e); 7 }; 8 9 10// マウスムーブ(要素の移動) 11 const mouseMove = (e) => { 12 if(!obj.elm ) return; 13 obj.setPos(e, obj); 14 obj.setOffset(e); 15 }; 16 17 18// マウスアップ(要素の移動 キャンセル) 19 const mouseUp = () => { 20 if(obj.elm) { 21 console.log(obj.elm); 22 obj.elm = null}; 23 console.log(obj.elm); 24 25 }; 26 27~~~~~~~~~~~~~~ 28 29 // イベントセット 30 const setEvent = (elm, evt, func) => { 31 elm.addEventListener(evt, func); 32 }; 33 34 // イベントセット実行 35 setEvent(element, 'mousedown', mouseDown); 36 setEvent(element, 'mousemove', mouseMove); 37 setEvent(document, 'mouseup', mouseUp); 38 setEvent(element, "contextmenu", contextMenu); 39 setEvent(element, 'click', contextMenuHiden); 40 } 41}); 42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mouseDownで、座標を調べて判定して処理を分岐させましょう。
クリックされた座標はe.offsetX e.offsetYです。
クリックされた画像のサイズはe.target.offsetWidth e.target.offsetHeight でわかります。

投稿2021/04/30 07:58

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rei78087487

2021/05/12 04:29

回答ありがとうございます。 同じ要素で同じイベントを、区分けして作成することが出来ました。 教えて頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問