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

Vue瀑布流插件的使用示例

 更新時間:2018年09月19日 10:20:16   作者:歡舞的螢火蟲  
這篇文章主要介紹了Vue瀑布流插件的使用示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

我自己寫的一個的Vue瀑布流插件,列數自適應,不用設置每個卡片的高度。

測試頁面:Page.vue

模板頁面:WaterFollow.vue 和 WFColumn.vue

在Page.vue中,修改itemW的值,設置每列的最小寬度。例如:itemW="200"(意為200px)。list為數組。高度不用設置,:style="{height:item+'px'}"是我為了創(chuàng)造卡片高度加上去的,不加就顯示卡片的原來大小。

經測試,created加載數據正常,mounted加載、更新數據正常。

Page.vue

<template>
 <div class="container">
  <w-f-column itemW="200">
   <template slot-scope="{columnNum,columnIndex}">
    <water-follow :list="list" :columnNum="columnNum" :columnIndex="columnIndex">
     <template slot-scope="{item,index}">
      <div class="my-box" :style="{height:item+'px'}">{{item}}-{{index}}</div>
     </template>
    </water-follow>
   </template>
  </w-f-column>
 </div>
</template>

<script>
import WFColumn from '../waterFollow/WFColumn'
import WaterFollow from '../waterFollow/WaterFollow'
export default {
 name: 'page',
 components: {WaterFollow, WFColumn},
 data () {
  return {
   list: []
  }
 },
 created () {
  // 有初始數據
  for (let i = 0; i < 50; i++) {
   this.list.push(Math.floor(Math.random() * 301 + 200))
  }
 },
 mounted () {
  // 模擬網絡請求
  // window.setTimeout(() => {
  //  this.list = []
  //  for (let i = 0; i < 50; i++) {
  //   this.list.push(Math.floor(Math.random() * 301 + 200))
  //  }
  // }, 1000)
  // -- 分割 --
  // 模擬數據不斷變化
  // window.setInterval(() => {
  //  this.list = []
  //  for (let i = 0; i < 50; i++) {
  //   this.list.push(Math.floor(Math.random() * 301 + 200))
  //  }
  // }, 1000)
 }
}
</script>

<style scoped lang="scss">
 .container{
  width: 100%;
  background: gray;
  .my-box{
   width: 200px;
   background: #000;
   margin-bottom: 20px;
   color: #fff;
  }
 }
</style>

WFColumn.vue

<template>
 <div class="wf-container">
  <div class="wf-column" v-for="(item,index) in columnNum" :key="'column-'+index" :name="index">
   <slot :columnNum="columnNum" :columnIndex="index"></slot>
  </div>
 </div>
</template>

<script>
export default {
 name: 'WFColumn',
 props: ['itemW'],
 data () {
  return {
   columnNum: 0
  }
 },
 created () {
  this.columnNum = Math.floor(document.body.clientWidth / this.itemW)
  window.onresize = () => {
   this.columnNum = Math.floor(document.body.clientWidth / this.itemW)
  }
 }
}
</script>

<style scoped lang="scss">
.wf-container{
 width: 100%;
 display: flex;
 .wf-column{
  flex: 1;
 }
}
</style>

WaterFollow.vue

<template>
 <div>
  <div v-for="(item,index) in list" :key="'item-'+index" class="item" :id="'card-'+columnIndex+'-'+index" v-if="load?(record[index].index===columnIndex):true">
   <slot :item="item" :index="index"></slot>
  </div>
 </div>
</template>

<script>
export default {
 name: 'WaterFollow',
 props: ['list', 'columnNum', 'columnIndex'],
 data () {
  return {
   column: 0,
   record: [],
   load: false,
   update: false
  }
 },
 methods: {
  calculateColumn () {
   let cList = []
   for (let i = 0; i < this.columnNum; i++) {
    cList.push(0)
   }
   for (let i = 0; i < this.record.length; i++) {
    let index = 0
    for (let j = 0; j < cList.length; j++) {
     if (cList[index] > cList[j]) {
      index = j
     }
    }
    cList[index] += this.record[i].height
    this.record[i].index = index
   }
  },
  recordInit () {
   for (let i = 0; i < this.list.length; i++) {
    this.record.push({index: -1, height: -1})
   }
  },
  initHeightData () {
   for (let i = 0; i < this.list.length; i++) {
    if (document.getElementById('card-' + this.columnIndex + '-' + i)) {
     let h = document.getElementById('card-' + this.columnIndex + '-' + i).offsetHeight
     this.record[i].height = h
    }
   }
  }
 },
 beforeCreate () {},
 created () {
  this.load = false
  this.recordInit()
 },
 beforeMount () {},
 mounted () {
  this.initHeightData()
  this.calculateColumn()
  this.load = true
 },
 beforeUpdate () {},
 updated () {
  if (this.update) {
   this.initHeightData()
   this.calculateColumn()
   this.update = false
   this.load = true
  }
 },
 beforeDestroy () {},
 destroyed () {},
 watch: {
  columnNum (curr, old) {
   this.calculateColumn()
  },
  list (curr, old) {
   console.log('list change')
   this.recordInit()
   this.load = false
   this.update = true
  }
 }
}
</script>

<style scoped>
</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue實現導航欄下拉菜單

    vue實現導航欄下拉菜單

    這篇文章主要為大家詳細介紹了vue實現導航欄下拉菜單,帶展開收縮動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • vue自定義指令之面板拖拽的實現

    vue自定義指令之面板拖拽的實現

    這篇文章主要介紹了vue自定義指令之面板拖拽的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • VSCode使用之Vue工程配置eslint

    VSCode使用之Vue工程配置eslint

    這篇文章主要介紹了VSCode使用之Vue工程配置eslint,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 詳解vue-template-admin三級路由無法緩存的解決方案

    詳解vue-template-admin三級路由無法緩存的解決方案

    這篇文章主要介紹了vue-template-admin三級路由無法緩存的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 一文掌握在Vue3中書寫TSX的使用方法

    一文掌握在Vue3中書寫TSX的使用方法

    但隨著vue3版本的到來,對typescript的支持度越來越高,tsx語法也被大部分人越來越接收,所以很多項目都是搭配 Vue3 + TS 進行的,這篇文章主要介紹了一文掌握在Vue3中書寫TSX的方法,需要的朋友可以參考下
    2023-05-05
  • vue實現鼠標滑動展示tab欄切換

    vue實現鼠標滑動展示tab欄切換

    這篇文章主要為大家詳細介紹了vue實現鼠標滑動展示tab欄切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue 中 get / delete 傳遞數組參數方法

    vue 中 get / delete 傳遞數組參數方法

    這篇文章主要介紹了vue 中 get / delete 傳遞數組參數方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Vue3組件異步更新和nextTick運行機制源碼解讀

    Vue3組件異步更新和nextTick運行機制源碼解讀

    這篇文章主要為大家介紹了Vue3組件異步更新和nextTick運行機制源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • vue+Ant?Design進度條滑塊與input聯(lián)動效果實現

    vue+Ant?Design進度條滑塊與input聯(lián)動效果實現

    最近接到這樣一個需求滑塊進度與輸入框為一致,默認值為80,最小不能小于30,最大為100,怎么實現這個聯(lián)動效果呢,下面小編給大家分享下基于vue+Ant?Design進度條滑塊與input聯(lián)動效果的實現,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Vue使用provide各種傳值后inject獲取undefined的問題及解決

    Vue使用provide各種傳值后inject獲取undefined的問題及解決

    這篇文章主要介紹了Vue使用provide各種傳值后inject獲取undefined的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

福泉市| 漳州市| 玉门市| 西和县| 南召县| 新乡市| 密山市| 利辛县| 峨山| 浦东新区| 克什克腾旗| 虹口区| 沈丘县| 眉山市| 贵州省| 揭阳市| 岱山县| 芜湖市| 兴城市| 夏河县| 宜兰县| 灵川县| 蕉岭县| 龙口市| 铜梁县| 临澧县| 郧西县| 章丘市| 镇赉县| 平顺县| 四川省| 馆陶县| 花垣县| 柞水县| 府谷县| 大理市| 濮阳县| 新巴尔虎左旗| 唐海县| 临沭县| 乌海市|