この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 成果を達成する 関連する使用属性 // clientX はブラウザの左上隅を基準としたマウスの x 軸座標です。スクロール バーによって変化しません。 // clientY ブラウザの左上隅を基準としたマウスの y 軸上の座標。スクロール バーによって変化しません。 // element.offsetTop は、要素と上部または上部コントロール間の距離 (整数、単位ピクセル) を示します。 // element.offsetLeft は、左または上のコントロールからの要素の位置 (整数、単位ピクセル) を参照します。 // element.offsetWidth は要素コントロール自体の幅 (整数、単位ピクセル) を参照します。 // element.offsetHeight は要素コントロール自体の高さ (整数、単位ピクセル) を参照します。 // clientHeigh = 高さ + 上部と下部のパディング // clientWidth = 幅 + 左右のパディング 完全なコードを実装する <テンプレート> <div class="to-do-list" ref="parentBox"> <div class="検索タイトル"> <h1 class="add-bold left-box" style="margin-left:35px"> <a-icon type="unordered-list" style="margin-right: 10px;" />要素のドラッグ</h1> </div> <a-button ref="moveBtn" style="width: 100px;height: 40px;transition:none" class="move-btn" type="primary" >ドラッグボタン</a-button > </div> </テンプレート> <script lang="ts"> 'vue-property-decorator' から { Component、Emit、Inject、Prop、Ref、Vue、Watch } をインポートします。 @成分({ コンポーネント: {}, }) エクスポートデフォルトクラス BriberyInformation は Vue を拡張します { @Ref() 読み取り専用で移動Btn; @Ref() 読み取り専用の親ボックス。 btnDown() { let box = this.moveBtn.$el; //ボタンのボックスのDOM要素を取得します。let parentBox = this.parentBox; //ボタンの親DOM要素を取得します。let parentH = parentBox.clientHeight; //ボタンの親要素の高さを取得します。 let parentW = parentBox.clientWidth; //ボタンの親要素の幅を取得する x, y とします。 let moveX, moveY; //移動距離let maxX, maxY; //最大移動距離let isDrop = false; ボックス.onmousedown = e => { x = e.clientX - box.offsetLeft; // e.clientX はブラウザの左上隅の x 軸に対するマウス座標 - ボタン上部のコントロールの位置 y = e.clientY - box.offsetTop; isDrop = true; }; ドキュメント.onmousemove = e => { if (isDrop) { e.preventDefault(); moveX = e.clientX - x; // 左側からの移動距離を取得します。 moveY = e.clientY - y; // 上からの移動距離を取得します。 // 最大移動距離 maxX = parentW - box.offsetWidth; maxY = 親H - ボックスのオフセット高さ; // 有効移動距離の計算 //console.log(Math.min(-1, 4, 6, 12)); // 出力 -1----- 複数のパラメーター、最小値を返す moveX = Math.min(maxX, Math.max(0, moveX)); 移動Y = Math.min(maxY, Math.max(0, 移動Y)); box.style.left = moveX + 'px'; box.style.top = moveY + 'px'; } それ以外 { 戻る; } }; ドキュメント.onmouseup = e => { e.preventDefault(); isDrop = false; }; } マウント() { this.btnDown(); } } </スクリプト> <style スコープ lang="less"> .to-doリスト{ 位置: 相対的; 最小高さ: 600px; 最大高さ: 600px; 幅: 600ピクセル; オーバーフロー: 非表示; 境界線: 2px 黒一色; .move-btn { 位置: 絶対; } } </スタイル> 参照元: JavaScript を使用して div のマウス ドラッグ効果を実装する 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: CSS を使用して 3 つのステップでショッピング モールのカード クーポンを作成する
Alibaba Cloud yum コマンドでのデフォルトの MySQL バージョンは 5.17**...
目次最初の方法: router-link (宣言型ルーティング) 2番目の方法: router.pu...
前提条件クラウドサーバー(Alibaba Cloud、Tencent CloudなどのcentOS)...
参考までに、Vue シングル サインオンのデモをご紹介します。詳細を知りたい方のお役に立てれば幸いで...
目次1 トランザクションの同時実行で発生する問題1.1 ダーティリード1.2 繰り返し不可能な読み取...
ウェブサイトを作成する学生は、アクセス時に一部の nginx サーバーが 504 Gateway T...
目次1. 配列の分解2. オブジェクトの分解3. 不完全な解体4. 分割代入を使用して変数交換を実装...
ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...
最近、実践的なトレーニング プロジェクトを実行する際に ssm フレームワークを使用しました。プロジ...
雑談はここまでにして、インターネット上で見つかる高性能な Yahoo ウェブサイトを構築するための数...
要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...
目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...
目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...
MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...
/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...