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 コードの説明: 順序付きリストと順序なしリスト

推薦する

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

HTML 内の input type="reset" タグが無効 (機能しない) である理由として考えられるもの。

<html:reset> タグを使用すると、リセット ボタンが無効になり、ボタンをクリッ...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

LinuxサーバにおけるNginxとApacheの共存の実装方法の分析

この記事では、Linux サーバー上で Nginx と Apache の共存を実装する方法について説...

LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)

[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...

HTMLタグの書き方でよくある間違い

注意を払う必要があります。HTML Police がコードを調べて、意味のないタグをすべて見つけ出す...

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...

MySQL 8.0 における非同期レプリケーションの 3 つの方法について簡単に説明します。

この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...

Dockerコンテナのネットワークポート設定プロセスの詳細な説明

ネットワークポートの公開実際、Docker にはネットワーク ポートの公開に関わる 2 つのパラメー...

MySQLインスタンスクラッシュ事例の詳細な分析

[問題の説明]私たちの実稼働環境には、複数の MySQL サーバー (MySQL 5.6.21) の...

MySQL シリーズ 8 MySQL サーバー変数

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

LinuxでIPを表示する方法の例

ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...

dl、dt、dd はいつ使用するのが適切ですか?

dl:定義一覧定義リストdt:定義タイトルタイトルを定義するdd:定義説明定義の説明dt は情報のタ...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

表の最初の行と最初の列を固定し、適応型ウィンドウを実現するための CSS の例コード

今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...