Vue は div の高さをドラッグ可能にします

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

ここに、ページ div のドラッグ機能を実現できる既製のデモがありますが、効果が私の希望とは少し異なるため、実際のニーズに合わせて再度修正しました。まずは、現在のデモ効果を見てみましょう。

<テンプレート>
  <div id="eagleMapContainer" style="border: 1px solid red;overflow-y: auto;" title="">
    <div id="tz" @mousedown="dragEagle" style="border: 1px solid blue;">
      <div title="ドラッグしてサイズを変更" id="move_tz" style="border: 1px solid green;"></div>
    </div>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: "eagleMap",
    データ() {
      戻る {}
    },
    メソッド: {
      ドラッグイーグル: 関数(e) {
        var targetDiv = document.getElementById('eagleMapContainer'); 
        //クリックされたときにマップ コンテナーの幅と高さを取得します。
        var targetDivHeight = targetDiv.offsetHeight;
        var startX = e.clientX;
        var startY = e.clientY;
        var _this = これ;
        document.onmousemove = 関数 (e) {
          e.preventDefault();
          //マウスのドラッグの幅と高さを取得します。絶対値を取得します。var distX = Math.abs(e.clientX - startX);
          var distY = Math.abs(e.clientY - startY);
          // 上方向にドラッグ:
          (e.clientY < startY) の場合 {
            targetDiv.style.height = targetDivHeight + distY + 'px';
          }
          // 下にドラッグ:
          (e.clientX < startX && e.clientY > startY) の場合 {
            targetDiv.style.height = (targetDivHeight - distY) + 'px';
          }
          (parseInt(targetDiv.style.height)> = 300)の場合{
            targetDiv.style.height = 300 + 'px';
          }
          (parseInt(targetDiv.style.height)<= 150)の場合{
            targetDiv.style.height = 150 + 'px';
          }
        }
        document.onmouseup = 関数(){
          ドキュメント.onmousemove = null;
        }
      }
    },
  };
</スクリプト>

<スタイルスコープ>
  #イーグルマップコンテナ{
    位置: 絶対;
    左: 13%;
    下: 10px;
    zインデックス: 200;
    オーバーフロー: 非表示;
    可視性: 可視;
    幅: 200ピクセル;
    高さ: 200px;
  }

  #tz {
    位置: 絶対;
    右: 1px;
    上: 1px;
    幅: 27px;
    高さ: 20px;
    カーソル:ne-resize;
    zインデックス: 200001;
    背景画像: url("");

  }

  #tz:ホバー{
    背景色: #666;
  }

  #move_tz {
    位置: 絶対;
    右: 0px;
    上: 0px;
    幅: 27px;
    高さ: 20px;
    カーソル:ne-resize;
    zインデックス: 100;
    背景画像: url("");
    背景位置: 0px 0px;
  }
</スタイル> 

しかし、その効果は私が望んでいたものとは少し違ったの​​で、少し修正する必要がありました。

私が望む効果は、小さな四角いリストが多数含まれる div があることです。スクロールが制限を超えて設定されているため、スクロール バーを使用して div にドラッグを追加し、高さを変更します。

次のステップは、上記のデモを変換することです。簡単にするために、コードに移動するだけです。

上にドラッグする必要がある div の下に div を追加し、この div をクリックしてドラッグ機能を開始します。

<!-- 小さなボックスをドラッグ アンド ドロップします -->
    <div id="tz" @mousedown="dragEagle">
      <div title="ドラッグしてサイズを変更" id="move_tz"></div>
    </div>

ドラッグに応じて高さが変化する div の ID を「fuDiv」として設定し、メソッドを記述する必要があります。

// ドラッグイーグル(e) {
        var targetDiv = document.getElementById('fuDiv');
        //クリックされたときにマップ コンテナーの幅と高さを取得します。
        var targetDivHeight = targetDiv.offsetHeight;
        var startX = e.clientX;
        var startY = e.clientY;
        var _this = これ;
        document.onmousemove = 関数 (e) {
          e.preventDefault();
          //マウスのドラッグの幅と高さを取得します。絶対値を取得します。var distY = Math.abs(e.clientY - startY);

          // 上方向にドラッグ:
          (e.clientY < startY) の場合 {
            targetDiv.style.height = targetDivHeight - distY + 'px';
          }
          // 下にドラッグ:
          e.clientX < startX && e.clientY > startY) の場合 {
            targetDiv.style.height = (targetDivHeight + distY) + 'px';
          }
          (parseInt(targetDiv.style.height)> = 320)の場合{
            targetDiv.style.height = 320 + 'px';
          }
          (parseInt(targetDiv.style.height)<= 160)の場合{
            targetDiv.style.height = 160 + 'px';
          }
        }
        document.onmouseup = 関数(){
          ドキュメント.onmousemove = null;
        }
      },

次に、それらの CSS スタイルを設定します。実際、この部分はカジュアルであり、自分の好みに応じて行うことができます。

  #tz {
    幅: 100%;
    高さ: 5px;
    カーソル: s-resize;
    zインデックス: 200001;
  }
  
  #move_tz {
    幅: 100%;
    高さ: 5px;
    カーソル: s-resize;
    zインデックス: 100;
    背景画像: url("");
    背景位置: 0px 0px;
  }

最終結果:

効果は特に良いわけではなく、最適化に値する部分がまだたくさんありますが、今は書きません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueでドラッグ可能なコンポーネントを実装する方法
  • Vueはドラッグ可能なダイアログボックスを実装します
  • Vue の一時停止されたドラッグ可能なフローティング ボタンのサンプル コード
  • Vueは、element-uiダイアログボックスのドラッグ可能な機能を実装します。
  • Vue プロジェクトで el-dialog コンポーネントのドラッグ可能な効果を実装する

<<:  VMware vCenter の不正な任意ファイルアップロードの脆弱性 (CVE-2021-21972) について

>>:  Web ページの HTML コードの説明: 順序付きリストと順序なしリスト

推薦する

MySQLのSQLモードの特徴のまとめ

序文SQL モードは、MySQL がサポートする SQL 構文と、実行されるデータ検証チェックに影響...

Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。

かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...

Linux サーバーが処理できる接続数をご存知ですか?

序文まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、...

HTML ページ適応幅テーブル

WEB アプリケーションのページでは、テーブルがよく使用されます。列の数が限られているため、各列のコ...

jQueryはフォーム検証機能を実装します

jQuery フォーム検証の例 / ユーザー名、パスワード、住所、電子メールの検証を含む下記の通り ...

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです操作は実際にはそれほど難しくありません。バックアップ操作を実...

Dockerのセキュリティについて Docker-TLS暗号化通信の問題

目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...

JavaScriptとTypeScriptの関係

目次1. JavaScript とは何ですか? 2. JavaScript は何に使用されますか? ...

MySQL 5.7.10 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...

MySql はコミットする必要がありますか?

MySQL が挿入などの操作を実行するときにコミットする必要があるかどうかは、ストレージ エンジン...

XHTML 入門チュートリアル: XHTML ハイパーリンク

ハイパーリンクはインターネット全体を接続していると言っても過言ではありません。ハイパーリンクは、別の...

MYSQLのバックアップデータのスケジュールクリアの特定の操作

1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...

nginx の 2 つのモジュールの proxy_pass の違い

1. 1.ngx_stream_proxy_moduleモジュールのproxy_passディレクティ...

1つの記事でNavicat for MySQLの基本を理解する

目次1. データベース操作2. データ型3. バックアップとリカバリ3. 操作4. 上級5. 知識補...