最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實(shí)現(xiàn)左右菜單聯(lián)動(dòng)實(shí)現(xiàn)代碼

 更新時(shí)間:2018年08月12日 11:23:46   作者:Rain120  
這篇文章主要介紹了Vue實(shí)現(xiàn)左右菜單聯(lián)動(dòng)實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了Vue實(shí)現(xiàn)左右菜單聯(lián)動(dòng)實(shí)現(xiàn)代碼嗎,分享給大家,也給自己留個(gè)筆記,具體如下:

Github

源碼傳送門: Rain120/vue-study

之前在外賣軟件上看到這個(gè)左右聯(lián)動(dòng)的效果,覺得很有意思,所以就嘗試使用 Vue 來實(shí)現(xiàn),將這個(gè)聯(lián)動(dòng)抽離成為一個(gè)單獨(dú)的組件,廢話少說,先來一張效果圖。

這個(gè)組件分為兩個(gè)部分,1、左菜單;2、右菜單。 左菜單的 DOM 結(jié)構(gòu)

<scroll
 class="left-menu"
 :data="leftMenu"
 ref="leftMenu">
 <div class="left-menu-container">
 <ul>
  <li
  class="left-item"
  ref="leftItem"
  :class="{'current': currentIndex === index}"
  @click="selectLeft(index, $event)"
  v-for="(item, index) in leftMenu"
  :key="index">
  <p class="text">{{item}}</p>
  </li>
 </ul>
 </div>
</scroll>

右菜單的 DOM 結(jié)構(gòu)

<scroll
 class="right-menu"
 :data="rightMenu" 
 ref="rightMenu"
 @scroll="scrollHeight"
 :listenScroll="true"
 :probeType="3">
 <div class="right-menu-container">
 <ul>
  <li class="right-item" ref="rightItem" v-for="(items, i) in rightMenu" :key="i">
  <div class="data-wrapper">
   <div class="title">{{items.title}}</div>
   <div class="data" v-for="(item, j) in items.data" :key="j">{{item}}</div>
  </div>
  </li>
 </ul>
 </div>
</scroll>

這里是為了做 demo ,所以在數(shù)據(jù)上只是單純捏造。

當(dāng)然因?yàn)檫@是個(gè)子組件,我們將通過父組件傳遞 props ,所以定義 props

props: {
 leftMenu: {
 required: true,
 type: Array,
 default () {
  return []
 }
 },
 rightMenu: {
 required: true,
 type: Array,
 default () {
  return []
 }
 },
}

在這個(gè)業(yè)務(wù)場景中,我們的實(shí)現(xiàn)方式是根據(jù)右邊菜單滾動(dòng)的高度來計(jì)算左邊菜單的位置,當(dāng)然左邊菜單也可以通過點(diǎn)擊來確定右邊菜單需要滾動(dòng)多高的距離,那么我們?nèi)绾潍@得該容器滾動(dòng)的距離呢? 之前一直在使用better-scroll,通過閱讀文檔,我們知道它有有 scroll 事件,我們可以通過監(jiān)聽這個(gè)事件來獲取滾動(dòng)的 pos

if (this.listenScroll) {
 let me = this
 this.scroll.on('scroll', (pos) => {
 me.$emit('scroll', pos)
 })
}

所以我們在右邊菜單的 scroll 組件上監(jiān)聽scroll事件

@scroll="scrollHeight"

method

scrollHeight (pos) {
 console.log(pos);
 this.scrollY = Math.abs(Math.round(pos.y))
},

我們將監(jiān)聽得到的pos打出來看看

我們可以看到控制臺打出了當(dāng)前滾動(dòng)的pos信息,因?yàn)樵谝苿?dòng)端開發(fā)時(shí),坐標(biāo)軸和我們數(shù)學(xué)中的坐標(biāo)軸相反,所以上滑時(shí)y軸的值是負(fù)數(shù)

所以我們要得到每一塊 li 的高度,我們可以通過拿到他們的 DOM

 _calculateHeight() {
 let lis = this.$refs.rightItem;
 let height = 0
 this.rightHeight.push(height)
 Array.prototype.slice.call(lis).forEach(li => {
 height += li.clientHeight
 this.rightHeight.push(height)
 })
console.log(this.rightHeight)
}

我們在 created 這個(gè) hook 之后調(diào)用這個(gè)計(jì)算高度的函數(shù)

 _calculateHeight() {
 let lis = this.$refs.rightItem;
 let height = 0
 this.rightHeight.push(height)
 Array.prototype.slice.call(lis).forEach(li => {
 height += li.clientHeight
 this.rightHeight.push(height)
 })
 console.log(this.rightHeight)
}

當(dāng)用戶在滾動(dòng)時(shí),我們需要計(jì)算當(dāng)前滾動(dòng)距離實(shí)在那個(gè)區(qū)間內(nèi),并拿到他的 index

computed: {
 currentIndex () {
 const { scrollY, rightHeight } = this
 const index = rightHeight.findIndex((height, index) => {
  return scrollY >= rightHeight[index] && scrollY < rightHeight[index + 1]
 })
 return index > 0 ? index : 0
 }
}

所以當(dāng)前應(yīng)該是左邊菜單 index = 1 的菜單項(xiàng) active 以上是左邊菜單根據(jù)右邊菜單的滑動(dòng)聯(lián)動(dòng)的實(shí)現(xiàn),用戶也可以通過點(diǎn)擊左邊菜單來實(shí)現(xiàn)右邊菜單的聯(lián)動(dòng),此時(shí),我們給菜單項(xiàng)加上 click事件

@click="selectLeft(index, $event)"

這里加上 $event 是為了區(qū)分原生點(diǎn)擊事件還是[better-scroll]((https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better-scroll 是什么)派發(fā)的事件

selectLeft (index, event) {
 if (!event._constructed) {
 return
 }
 let rightItem = this.$refs.rightItem
 let el = rightItem[index]
 this.$refs.rightMenu.scrollToElement(el, 300)
},

到這里我們就基本上完成了這些需求了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue 2.x教程之基礎(chǔ)API

    Vue 2.x教程之基礎(chǔ)API

    這篇文章主要介紹了Vue 2.x基礎(chǔ)API的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Vue實(shí)現(xiàn)阻止瀏覽器記住密碼功能的三種方法

    Vue實(shí)現(xiàn)阻止瀏覽器記住密碼功能的三種方法

    本文主要介紹了Vue實(shí)現(xiàn)阻止瀏覽器記住密碼功能的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐教程

    vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐教程

    這篇文章主要給大家介紹了關(guān)于vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐的相關(guān)資料,其中包括vue-router 2.0的基礎(chǔ)用法、動(dòng)態(tài)路由匹配、嵌套路由、編程式路由、命名路由以及命名視圖等相關(guān)知識,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • vue3使用element-plus搭建后臺管理系統(tǒng)之菜單管理功能

    vue3使用element-plus搭建后臺管理系統(tǒng)之菜單管理功能

    這篇文章主要介紹了vue3使用element-plus搭建后臺管理系統(tǒng)之菜單管理,使用element-plus el-tree組件快速開發(fā)樹形菜單結(jié)構(gòu),el-tree組件中filter-node-method事件便可以實(shí)現(xiàn)樹形菜單篩選過濾功能,需要的朋友可以參考下
    2022-04-04
  • Vue 過渡實(shí)現(xiàn)輪播圖效果

    Vue 過渡實(shí)現(xiàn)輪播圖效果

    本篇文章主要介紹了Vue 過渡實(shí)現(xiàn)輪播圖效果,Vue 的過渡系統(tǒng)是內(nèi)置的,在元素從 DOM 中插入或移除時(shí)自動(dòng)應(yīng)用過渡效果。有需要的小伙伴可以參考下。
    2017-03-03
  • vue 集成jTopo 處理方法

    vue 集成jTopo 處理方法

    這篇文章主要介紹了vue 集成jTopo 處理方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • 在vue項(xiàng)目中集成graphql(vue-ApolloClient)

    在vue項(xiàng)目中集成graphql(vue-ApolloClient)

    這篇文章主要介紹了在vue項(xiàng)目中集成graphql(vue-ApolloClient),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • 在nuxt使用vueX代替storage的實(shí)現(xiàn)方案

    在nuxt使用vueX代替storage的實(shí)現(xiàn)方案

    這篇文章主要介紹了在nuxt使用vueX代替storage的實(shí)現(xiàn)方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解vue配置請求多個(gè)服務(wù)端解決方案

    詳解vue配置請求多個(gè)服務(wù)端解決方案

    這篇文章主要介紹了詳解vue配置請求多個(gè)服務(wù)端解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • vue路由三種傳參方式詳細(xì)講解

    vue路由三種傳參方式詳細(xì)講解

    在Vue中有多種方式可以進(jìn)行路由跳轉(zhuǎn)并傳遞參數(shù),這篇文章主要給大家介紹了關(guān)于vue路由三種傳參方式的相關(guān)資料,文中介紹的方法分別包括params傳參、query傳參(顯示傳參)以及props傳參(路由組件傳參),,需要的朋友可以參考下
    2023-10-10

最新評論

股票| 浠水县| 定结县| 五莲县| 冷水江市| 定日县| 大荔县| 巫山县| 灵台县| 浦江县| 新邵县| 长乐市| 恩施市| 赣榆县| 萝北县| 阿图什市| 东乡县| 汝城县| 临江市| 康保县| 济阳县| 辛集市| 集贤县| 泸定县| 布尔津县| 新昌县| 牟定县| 大连市| 华容县| 德庆县| 大姚县| 海口市| 景泰县| 闽侯县| 晋中市| 柘城县| 高碑店市| 闽清县| 石景山区| 定南县| 宝清县|