首页 > 其他分享 >uniapp瀑布流

uniapp瀑布流

时间:2022-09-30 20:57:09浏览次数:54  
标签:uniapp .. index column list itemWidth item 瀑布

<style lang="scss" scoped>
.list-container{
display: flex;
flex-wrap: wrap;
// padding-top: 40rpx;

}
.list{
flex: 1
}

.card{
margin: 4rpx;
border-radius: 10rpx;
overflow: hidden;

}
</style>

<template>
<view>
<view :id="'list_' + listId" class="list-container">
<view class="list" v-for="(items, i) in itemsList" :key="i">
<view class="card" v-for="(item, index) in items" :key="index" @click="handClickItem(item)">
<my-img :imgurl="item.image" :height="item.imgHeight"></my-img>
<my-content
:avater_url="item.avater_url"
:title="item.title"
:name="item.name"
></my-content>
</view>
</view>
</view>
<xLoadMore ref="loadMore"></xLoadMore>
</view>
</template>

<script>
import xLoadMore from '../../../pages_community/components/load_more/index.vue'
import xContent from "./content/index.vue"
import xImg from "./img/index.vue"

import { getImageInfo } from '../../../utils/uniapi.js'
import { randomStr } from '../../../utils/common.js'

export default {
components: {
xLoadMore,
'my-img': xImg,
'my-content': xContent
},

props: {
// 列数
column: {
type: Number,
default: 2,
},
list: {
type: Array,
default() {
return []
},
},
queryType: {
default: 0
}
},

data() {
return {
listId: randomStr(8),
itemsList: [[], []],
itemsHeight: [0, 0],
sum: 0, // 数据总个数
itemWidth: 0, // 每列宽度
}
},

watch: {
column() {
this.init()
},
list: {
deep: true,
handler() {
this.reset()
this.updateList(this.sum)
this.sum = this.list.length;
},
},
},

mounted() {
this.init()
},

methods: {
reset(){
if(this.queryType == 0) {
// 初始化数据
for (let i = 0; i < this.column; i++) {
this.itemsList[i] = []
this.itemsHeight[i] = 0
this.sum = 0;
}
}
},

init() {
this.reset()

// getNodeInfo('#list_' + this.listId, this).then(rect => {
// this.itemWidth = Math.floor((rect.width - (this.column + 1) * 10) / this.column)
// // console.log('this.itemWidth', this.itemWidth)
// this.updateList()
// })

// 单列宽度计算
this.itemWidth = Math.floor((uni.upx2px(750) - (this.column + 1) * 10) / this.column)
this.updateList()
},

// 更新列表
updateList(i = 0) {
const item = this.list[i]

if (!item) {
return;
}

if(i == 1) {
item.title += '---测试瀑布流--- 阿卡技术阿卡还是思考啥酒红色文化无花果'
}

getImageInfo(item.image).then(data => {
const min = Math.min.apply(Math.min, this.itemsHeight)
const index = this.itemsHeight.findIndex(n => n === min);

let height = 251;
if (data && data.height) {
height = this.itemWidth * data.height / data.width
}
item.imgHeight = height;

this.itemsList[index].push(item);
this.itemsHeight[index] += height
this.$forceUpdate()

setTimeout(() => {
this.updateList(i + 1)
})
})
},

openLoad() {
this.$refs.loadMore.openLoading()
},

closeLoad() {
this.$refs.loadMore.closeLoading()
},

noMore() {
this.$refs.loadMore.noMore()
},

// 点击元素
handClickItem(item) {
this.$emit('onClickItem', item)
}
},
}
</script>

标签:uniapp,..,index,column,list,itemWidth,item,瀑布
From: https://www.cnblogs.com/xushan03/p/16746213.html

相关文章

  • uniapp微信小程序添加更新检测
    App.vue:可以放在onShow:热启动(后台进入前台)和onLaunch:冷启动(重启小程序)下constupdateManager=uni.getUpdateManager();updateManager.onCheckForUpdate(function(......
  • 分享一个Vue实现图片水平瀑布流的插件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一.需求来源今天碰到了一个需求,需要在页面里,用水平瀑布流的方式,将一些图片进行加载,这让我突然想起我很久......
  • 5 种瀑布流场景的实现原理解析
    一、背景本文介绍5种瀑布流场景的实现,大家可以根据自身的需求场景进行选择。5种场景分别是:瀑布流特点纵向+高度排序纯CSS多列实现,是最简单的瀑布流写法......
  • 2022-09-28 隐藏掉uniapp出现的HTML5+ Runtime提示框
    把uniapp项目打包到app上并运行时会出现一个版本兼容检查提示框,可以通过配置manifest.json中的app-plus来控制是否显示。"compatible":{"ignoreVersion":false,/......
  • UNIAPP的生命周期
    UNIAPP的生命周期: Pages页面生命周期:onlnit:初始化加载(比Load更早)百度小程序专用onLoad:初始化加载onShow:页面显示onReady:DOM加载完毕......
  • uniapp 使用 uni.share分享功能报错 :fail:{"errMsg":"share:fail method 'share' not
    报错代码:<u-button:custom-style="customStyle"@click="share"><u-iconname="zhuanfa"color="#ffffff"size="35"></u-icon>分享</u-button>//分享s......
  • uniapp 调起地图
    uni.chooseLocation({success:function(res){console.log('位置名称:'+res.name);console......
  • uniapp如何分包 & 分包配置后无法读取static文件夹
    1.为什么会使用uniapp分包?   最近因为使用uniapp做小程序,所以后面在程序发布预览时,经常出现:微信小程序Error系统错误,sourcesize2126KBexceedmaxlimit2MB等问题......
  • 2022-09-27 uniapp项目中iconfont阿里云图标不显示
    前言:uniapp项目中iconfont阿里云图标不显示,运行到浏览器能显示,打包到真机(Android)和模拟器(Android)上能显示,ios不能显示,打包h5不能显示(ios和android和浏览器不能显示)原......
  • uniapp 卡片布局
    使用uview框架<viewclass=""><u-rowgutter="4"align="top"><blockv-for="item,indexin5":key="index">......