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 エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

グループフィールドを 1 行に書き込むための mysql group_concat メソッドの例

この記事では、MySQL group_concat を使用してグループ化されたフィールドを 1 つの...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

高度な JavaScript フロントエンド開発でよく使用されるいくつかの API の例の詳細な説明

目次ミューテーションオブザーバーAPI特徴インターセクションオブザーバーAPI例えば画像の遅延読み込...

SpringBoot プロジェクトの Docker クイック デプロイメントの紹介

1. Dockerをインストールするまず Linux 環境を開き、次のコマンドを入力してインストール...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

スローモーションアニメーション効果を実現するJavaScript

この記事では、スローモーションアニメーション効果を実現するためのJavaScriptの具体的なコード...

Docker での Jenkins と Docker を使用した継続的デリバリー

1. 継続的デリバリーとは何かソフトウェア製品の出力プロセスは、ソフトウェアがいつでもリリースできる...

JavaScript の非同期処理で待機時間を節約できますか?

JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用...

純粋な CSS3 で水平無限スクロールを実装するためのサンプル コード

この記事の例はすべて小さなプログラムで書かれていますが、実装される機能には影響しません。 wxmlル...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

React Fiber構造の作成手順

目次リアクトファイバーの作成1. 始める前に2. React.renderから始める3. 終了リアク...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

Dockerの基本的な手順

目次基本的な指示1. 現在のマシンのコンテナステータスを確認する2. イメージをダウンロードまたは取...