<!-- * @Author: yang * @Date: 2020-10-18 15:58:57 * @LastEditors: yang * @LastEditTime: 2020-10-23 17:27:59 * @FilePath: \gl\src\component\index\receive.vue--><template>  <div class="about">    <p>瀑布流,点击图片可删除一个</p>    <div class="page">      <div        class="content"        v-for="(item, index) in list"        :key="item.id"        :style="{          width: waterfallW + 'px',          height: item.imgH + 'px',          left: item.left + 'px',          top: item.top + 'px',        }"        ref="col"        @click="clickMe(index)"      >        <img :src="item.image" alt="" />      </div>    </div>  </div></template><script>export default {   data() {     return {      list: [      {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 122,      title: '题目只有1行哦长砍',      desc: 'Bon Cake(徐家汇店)这家店不要条好吃啊',      praiseNum: 322,      top: 0,      left: 0,      itemH: 0,    },    {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 334,      title: '题目只有1行哦长砍题目只有1行哦长砍题目只有1行哦长砍',      desc:        'Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店',      praiseNum: 32232,      top: 0,      left: 0,      itemH: 0,    },    {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 173,      title: '题目只有1行哦长砍',      desc:        'Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店',      praiseNum: 32,      top: 0,      left: 0,      itemH: 0,    },    {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 225,      title: '题目只有1行哦长砍',      desc: 'Bon Cake(徐家汇店)这家店',      praiseNum: 32,      top: 0,      left: 0,      itemH: 0,    },    {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 89,      title: '题目只有1行哦长砍',      desc:        'Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店Bon Cake(徐家汇店)这家店',      praiseNum: 32,      top: 0,      left: 0,      itemH: 0,    },    {      image:        'http://img-agc.iqianggou.com/0a62fca1eeab88e894b93539c35446ec!180x180',      imgH: 112,      title: '题目只有1行哦长砍',      desc: 'Bon Cake(徐家汇店)这家店',      praiseNum: 32,      top: 0,      left: 0,      itemH: 0,     }      ],       initLeft:'',       waterfallW:'',       screenWidth:document.clientWidth,//屏幕宽度        gap:10,//图片之间的间距      leftH : 0,//左侧高度      rightH:0//右侧高度     }   },   created () {     this.waterfallW = (this.screenWidth-30)/2;     this.initLeft = (this.screenWidth - this.waterfallW)/2;   },   mounted () {     const nodeList = this.$refs.col;     this.doSort(nodeList)   },   methods: {    //  排序     doSort(nodeList) {       for(let i =0;i<nodeList.length;i++){         nodeList[i].style.position = 'absolute';         const domHeight = nodeList[i].clientHeight; //获取图片的高度         let top,left,itemH;        //  排列数据的模式高的在左侧,低矮的在右侧         if(this.leftH>this.rightH){//如果左侧的比右侧图片高           left = this.gap * 2 + this.waterfallW;  //右侧的left           top = this.rightH + this.gap;//图片高度加间距           itemH = domHeight;           this.rightH += this.gap + domHeight;//右侧的整体高度         }else{           left = this.gap;           top = this.leftH + this.gap;//左侧的top           itemH = domHeight;//图片的高度           this.leftH += this.gap + domHeight;//左侧的高度         }         this.list[i].top = top;         this.list[i].left = left;         this.list[i].itemH = itemH;         this.list[i].itemW = this.waterfallW;       }     },     clickMe(index){       const renderedList = this.list.slice(0,index)//失去索引前的数据       const afreshRenderList = this.list.slice(index+1)//失去点击索引后的数据       if(this.list[index].left>this.gap){//就是右侧的图片         this.rightH = this.list[index].top - this.gap //去除一个间距,被删除数据列无需重排数据的高度         this.leftH = this.checkHeight(renderedList,'left')       }else{         this.rightH = this.checkHeight(renderedList,'right')         this.leftH = this.list[index].top-this.gap//去除一个间距,被删除数据列无需重排数据的高度       }       const newList = this.restartSort(afreshRenderList)       this.list = [...renderedList,...newList]     },     //  查找不须要重新排列的数据中非被删除列的高度     checkHeight(list,col){       let needHeight = 0;       for(let i=0;i<list.length;i++){         if(col == 'left'&& list[i].left == this.gap&&list[i].top>needHeight){           needHeight = list[i].top+list[i].itemH         }else if(col = 'right'&&           list[i].left>this.gap&&           list[i].top>needHeight){             needHeight = list[i].top + list[i].itemH;           }       }       return needHeight;     },     //重新排列列表中被删除数据之后的所有数据     restartSort(list){//重排之后 长的在右边,短的在左边       const newList = list       newList.forEach((item)=>{         if(this.leftH>this.rightH){           item.left = this.gap*2+item.itemW //右侧的left           item.top = this.rightH + this.gap //右侧的top           this.rightH +=this.gap+item.itemH//右侧的高度         }else{           item.left = this.gap //左侧的left           item.top = this.leftH + this.gap //左侧的top           this.leftH += this.gap+item.itemH         }       })       return newList;     }   },}</script><style lang="scss" scoped>.page {  position: relative;  width: 100%;  height: 100%;}.content {  position: fixed;  top: 100%;  img {    display: block;    width: 100%;    height: 100%;  }}</style>