国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

通過vue寫一個(gè)瀑布流插件代碼實(shí)例

2019-11-19 10:51:31
字體:
供稿:網(wǎng)友

這篇文章主要介紹了通過vue寫一個(gè)瀑布流插件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

效果如圖所示:

采用了預(yù)先加載圖片,再計(jì)算高度的辦法。。網(wǎng)絡(luò)差的情況下,可能有點(diǎn)卡

新建 vue-water-easy.vue 組件文件

<template>  <div class="vue-water-easy" ref="waterWrap">    <div v-for="(items,clos) in list" :key="clos" :style="waterStyle" class="colsW">      <ul>        <li v-for="(item,index) in items" :key="index" :style="{marginBottom:gap+'px'}">          <slot :item="item" :index="index" :clos="clos"></slot>        </li>      </ul>    </div>  </div></template><script> export default {  props:{    maxCols:{      type:Number,      default:3,      validator(value){        return value > 1;      }    },    srcKey:{      type:String,      default:"src"    },    gap:{      type:Number,      default:10,      validator(value){        return value > 0;      }    },    imgsArr:{      type:Array,      required:true    }  },  computed:{    waterStyle(){      if(this.gap <= 0){        this.gap = 10;      }      return {        margin:`0 ${this.gap/2}px`      }    }  },  watch:{    imgsArr(val){      this.$nextTick(()=>{        this.list = this.initData();        this.start(0);      })    }  },  data(){    let list = this.initData();    return {      list:list    }  },  mounted(){    this.start(0);  },  methods:{    initData(){      let list = new Array(this.maxCols);      for(let i = 0; i < this.maxCols ; i++){        list[i] = [];      }      return list;    },    start(i){      const me = this;      let imgsArr = me.imgsArr;      if(i >= imgsArr.length && this.$refs.waterWrap){        return ;      }       me.loadImg(imgsArr[i],i).catch(()=>{       }).finally(()=>{         me.start(++i);       });      // for(let i = 0; i < imgsArr.length; i++ ){      //   let item = imgsArr[i];      //   me.loadImg(item,i);      // }    },    loadImg(item){      const me = this;      let srcKey = me.srcKey;      return new Promise(function(resolve,reject){        if(item && item[srcKey]){          let src = item[srcKey];          let img = new Image();          img.src = src;          img.crossOrigin = "anonymous";          img.onload = function(){            var index = me.getMinHeight();            me.list[index].push(item);            me.$nextTick(()=>{              resolve(img)            });          }          img.onerror = function(e){            reject(e);          }         }else{           reject('數(shù)據(jù)錯(cuò)誤');         }      })           },    getMinHeight(){      let index = 0;      try{        if(!this.$refs.waterWrap){          return index;        }        let childs = this.$refs.waterWrap.children || [];        let minx = childs[0].children[0].offsetHeight;        for(let i = 1; i < childs.length; i++){          let element = childs[i];          let h = element.children[0].offsetHeight;          if(h < minx){            minx = h ;            index = i;          }        }      }catch(e){        console.warn(e);        return index;      }             return index;    }   }}</script><style lang="scss" scoped>.vue-water-easy{  width: 100%;  display: flex;  justify-content: space-between;  div.colsW{    flex: 1;    box-sizing: border-box;    position: relative;    &:last-child{      margin-right: 0 !important;    }    &:first-child{      margin-left: 0 !important;    }    ul{      list-style: none;      width: 100%;      li{        width: 100%;      }    }  }  }</style>

使用

<vueWaterEasy :imgsArr="imgsArr" srcKey="url">      <template v-slot="{item}">        <img :src="item.url" alt="">      </template></vueWaterEasy>

imgsArr:為圖片數(shù)據(jù)的數(shù)組,內(nèi)部包含對象 [ { src:"xxxx" } ]

srckey : 為圖片路徑的屬性,默認(rèn)為 src

maxCols: 多少列 默認(rèn)為 3

gap : 每列的間距默認(rèn) 10px

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 六安市| 怀宁县| 武川县| 北川| 和顺县| 新郑市| 庆阳市| 竹山县| 汶川县| 玛纳斯县| 无为县| 霍林郭勒市| 平昌县| 鹤山市| 湘乡市| 南平市| 大渡口区| 衡山县| 西乡县| 西青区| 平江县| 凤阳县| 沈丘县| 乌海市| 大同县| 南宁市| 北碚区| 北海市| 岳池县| 石家庄市| 安乡县| 淮南市| 武平县| 虹口区| 阜城县| 沅江市| 岳池县| 天峨县| 辽源市| 正阳县| 吕梁市|