溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用vue實(shí)現(xiàn)一個(gè)側(cè)邊欄拖動(dòng)功能

發(fā)布時(shí)間:2023-04-07 11:21:42 來源:億速云 閱讀:149 作者:iii 欄目:web開發(fā)

這篇文章主要介紹了如何用vue實(shí)現(xiàn)一個(gè)側(cè)邊欄拖動(dòng)功能的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇如何用vue實(shí)現(xiàn)一個(gè)側(cè)邊欄拖動(dòng)功能文章都會(huì)有所收獲,下面我們一起來看看吧。

首先,需要安裝 Vue.js,可以使用 npm 或 yarn 安裝,并在項(xiàng)目中引入 Vue.js:

<script src="https://cdn.jsdelivr.net/npm/vue"></script>

在 Vue.js 中,可以定義組件,在組件中編寫側(cè)邊欄拖動(dòng)的代碼。在本例中,我們將創(chuàng)建一個(gè)名為 DragSidebar 的組件。在 DragSidebar 組件中,需要定義兩個(gè)數(shù)據(jù)屬性:dragging 和 mouseX。dragging 表示側(cè)邊欄是否正在被拖動(dòng),mouseX 表示鼠標(biāo)的 X 坐標(biāo)。

<template>
  <div class="drag-container">
    <div class="sidebar" :style="{ transform: translate }" @mousedown="mousedown"
         @mouseup="mouseup" @mousemove="mousemove">
      <div class="content">
        <slot></slot>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dragging: false,
      mouseX: 0,
      sidebarX: 0
    }
  },
  computed: {
    translate() {
      return `translate3d(${this.sidebarX}px, 0, 0)`
    }
  },
  methods: {
    mousedown(event) {
      this.dragging = true
      this.mouseX = event.clientX
    },
    mouseup() {
      this.dragging = false
    },
    mousemove(event) {
      if (this.dragging) {
        const diff = event.clientX - this.mouseX
        this.sidebarX += diff
        this.mouseX = event.clientX
      }
    }
  }
}
</script>

<style scoped>
.drag-container {
  display: flex;
  align-items: stretch;
  height: 100vh;
  overflow: hidden;
}

.sidebar {
  width: 320px;
  min-width: 320px;
  height: 100%;
  background-color: #F2F2F2;
  transition: transform .3s ease;
}

.content {
  padding: 24px;
}
</style>

在上面的代碼中,我們定義了三個(gè)方法:mousedown、mouseup 和 mousemove,分別處理按下、松開和移動(dòng)鼠標(biāo)事件。在 mousedown 中,我們將 dragging 屬性設(shè)置為 true,表示側(cè)邊欄開始被拖動(dòng),同時(shí)記錄鼠標(biāo)的 X 坐標(biāo)。在 mouseup 中,我們將 dragging 屬性設(shè)置為 false,表示側(cè)邊欄停止被拖動(dòng)。在 mousemove 中,我們根據(jù)鼠標(biāo)的移動(dòng)距離調(diào)整側(cè)邊欄的位置。

最后,我們?cè)诟附M件中使用 DragSidebar 組件,并在其中添加一些子組件來測(cè)試。你可能需要自行添加一些 CSS 樣式來適配你的項(xiàng)目需求。

<template>
  <div class="app">
    <drag-sidebar>
      <h2>Title</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      <p>Suspendisse consectetur pharetra ante sit amet bibendum.</p>
    </drag-sidebar>
    <div class="main">
      <h2>Main content</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      <p>Suspendisse consectetur pharetra ante sit amet bibendum.</p>
    </div>
  </div>
</template>

<script>
import DragSidebar from './components/DragSidebar.vue'

export default {
  components: {
    DragSidebar
  }
}
</script>

<style>
.app {
  height: 100vh;
  display: flex;
}

.main {
  flex-grow: 1;
  padding: 24px;
}
</style>

關(guān)于“如何用vue實(shí)現(xiàn)一個(gè)側(cè)邊欄拖動(dòng)功能”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“如何用vue實(shí)現(xiàn)一個(gè)側(cè)邊欄拖動(dòng)功能”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vue
AI