ホームページ ウェブフロントエンド Vue.js vue.jsでドラッグ可能なメニューを実装する方法

vue.jsでドラッグ可能なメニューを実装する方法

Oct 12, 2021 pm 04:48 PM
vue.js メニュー

ドラッグ可能なメニューを実装するための Vue.js メソッド: [import "@/assets/second.css";export デフォルト {name: "HelloWorld",directives: {move(el, bindings) {.. .] 。

vue.jsでドラッグ可能なメニューを実装する方法

#この記事の動作環境: Windows10 システム、vue.js 2.9、thinkpad t480 コンピューター。

正式な実装コードを与える前に、まず関連する知識ポイントをいくつか理解する必要があります。

知識ポイント 1:

vue のカスタム命令ディレクティブ

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

// 注册局部自定义指令

directives: {
  focus: {
    // 指令的定义
    inserted: function (el) {
      el.focus()
    }
  }
}
// 在此我们用的是局部
ログイン後にコピー

知識ポイント 2: js

	onmousedown 			:鼠标按下事件
	clientX	    			:时鼠标指针相对于浏览器页面(或客户区)的水平坐标
    document.getElementById :通过id获取节点
    offsetWidth				:获取的是盒子最终的宽
    onmousemove				:鼠标移动事件 
    onmouseup				:鼠标释放事件
ログイン後にコピー

レンダリング:

vue.jsでドラッグ可能なメニューを実装する方法

vue.jsでドラッグ可能なメニューを実装する方法

ページ コード:


	<template>
  <el-container>
    <el-main>
      <div class="myBox">
        <div id="silderLeft">
          <div class="menuList">侧栏菜单区</div>
          <div class="moveBtn" v-move></div>
        </div>
        <div class="silderRight">右边自适应大小,黄色的为拖拽的按钮</div>
      </div>
    </el-main>
  </el-container>
</template>

<script>
import "@/assets/second.css";
export default {
  name: "HelloWorld",
  directives: {
    move(el, bindings) {
      el.onmousedown = function(e) {
        var init = e.clientX;
        var parent = document.getElementById("silderLeft");
        var initWidth = parent.offsetWidth;
        document.onmousemove = function(e) {
          var end = e.clientX;
          var newWidth = end - init + initWidth;
          parent.style.width = newWidth + "px";
        };
        document.onmouseup = function() {
          document.onmousemove = document.onmouseup = null;
        };
      };
    }
  },
  data() {
    return {
      msg: "我是第二页"
    };
  },
  methods: {},
  mounted() {},
  created() {},
  updated() {}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
ログイン後にコピー

スタイル コード:


.myBox{
    width: 100%;;
    height: 700px;
    border: 1px solid red;
    display: flex;
}
#silderLeft{
    width: 250px;
    height: 100%;    
    background-color: #999;
    position: relative;
    /* overflow-y: auto; */
}
/* 拖动条 */
.moveBtn{
    height: 100%;
    width: 10px;
    /* opacity: 0; */
    position: absolute;
    right: 0px;
    top: 0;
    cursor: col-resize;
    background-color: yellow;
}
.menuList{
    background-color: yellowgreen;
    /* height: 120%; */
}
.silderRight{
    height: 100%;
    background-color: sandybrown;
    flex: 1;
}
ログイン後にコピー

カスタム コマンドを変更できます。最小ドラッグ幅

directives: {
    move(el, bindings) {
      el.onmousedown = function(e) {
        var init = e.clientX;
        console.log(&#39;init&#39;,init);
        var parent = document.getElementById("sidebar");
        var initWidth = parent.offsetWidth;
        document.onmousemove = function(e) {
          var end = e.clientX;
          // end - init表示鼠标移动的距离
          // end为鼠标移动的宽度,可用于设置最小宽度
          if(end > 250){
            var newWidth = end - init + initWidth;
            parent.style.width = newWidth + "px";
          }else{
            end = 250;
            // 最小宽度242
            parent.style.width = 242 + "px";
          }
        };
        document.onmouseup = function() {
          document.onmousemove = document.onmouseup = null;
        };
      };
    }
  }
ログイン後にコピー

推奨学習:

phpトレーニング

以上がvue.jsでドラッグ可能なメニューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11: スタート レイアウトをインポートおよびエクスポートする簡単な方法 Windows 11: スタート レイアウトをインポートおよびエクスポートする簡単な方法 Aug 22, 2023 am 10:13 AM

Windows 11: スタート レイアウトをインポートおよびエクスポートする簡単な方法

Windows 11の右クリックメニューで「その他のオプションを表示」をデフォルトにする方法 Windows 11の右クリックメニューで「その他のオプションを表示」をデフォルトにする方法 Jul 10, 2023 pm 12:33 PM

Windows 11の右クリックメニューで「その他のオプションを表示」をデフォルトにする方法

vue3 の reactive() について詳しく話しましょう vue3 の reactive() について詳しく話しましょう Jan 06, 2023 pm 09:21 PM

vue3 の reactive() について詳しく話しましょう

Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Apr 24, 2023 am 10:52 AM

Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明

Vue3 で単体テストを作成する方法を調べる Vue3 で単体テストを作成する方法を調べる Apr 25, 2023 pm 07:41 PM

Vue3 で単体テストを作成する方法を調べる

vue のコンポーネント化とモジュール化の違いは何ですか vue のコンポーネント化とモジュール化の違いは何ですか Dec 15, 2022 pm 12:54 PM

vue のコンポーネント化とモジュール化の違いは何ですか

vite が .env ファイルを解析する方法についての詳細な説明 vite が .env ファイルを解析する方法についての詳細な説明 Jan 24, 2023 am 05:30 AM

vite が .env ファイルを解析する方法についての詳細な説明

chatgpt のタイプライター効果を実現する vue3 の詳細な例 chatgpt のタイプライター効果を実現する vue3 の詳細な例 Apr 18, 2023 pm 03:40 PM

chatgpt のタイプライター効果を実現する vue3 の詳細な例

See all articles