|
|
|
@ -1,24 +1,68 @@ |
|
|
|
<template> |
|
|
|
<view class="content"> |
|
|
|
<view class="image-item" v-for="item in 5" :key="item"> |
|
|
|
<image src="https://picsum.photos/200"></image> |
|
|
|
</view> |
|
|
|
<block v-if="show"> |
|
|
|
<view class="image-item" |
|
|
|
v-for="(item, index) in list" :key="index" |
|
|
|
v-if="(index+1) < count" |
|
|
|
@click="clickImage(index)"> |
|
|
|
<image :src="item"></image> |
|
|
|
</view> |
|
|
|
<view class="image-item image-surplus" |
|
|
|
:style="{'background': themeColor}" |
|
|
|
v-if="list.length > count"> |
|
|
|
<text>{{ surplusNum }}</text> |
|
|
|
</view> |
|
|
|
</block> |
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
export default { |
|
|
|
props: { |
|
|
|
list: { |
|
|
|
type: Array, |
|
|
|
default: function(){ |
|
|
|
return [ |
|
|
|
"https://picsum.photos/200", |
|
|
|
"https://picsum.photos/210", |
|
|
|
"https://picsum.photos/220", |
|
|
|
"https://picsum.photos/230", |
|
|
|
"https://picsum.photos/240" |
|
|
|
] |
|
|
|
} |
|
|
|
}, |
|
|
|
themeColor: { |
|
|
|
type: String, |
|
|
|
default: '#E21196' |
|
|
|
} |
|
|
|
}, |
|
|
|
data(){ |
|
|
|
return { |
|
|
|
|
|
|
|
show: false, |
|
|
|
count: 0 |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
surplusNum(){ |
|
|
|
let num = this.$props.list.length - this.count; |
|
|
|
num = Math.floor(num); |
|
|
|
num = num > 99 ? '99+' : '+'+ num; |
|
|
|
return num; |
|
|
|
} |
|
|
|
}, |
|
|
|
onLoad(){ |
|
|
|
// TODO 优化当头像数量超过盒子大小时最后一个元素显示+剩余多少张 |
|
|
|
// 参考:http://www.bootstrapmb.com/item/2739 |
|
|
|
mounted(){ |
|
|
|
let that = this; |
|
|
|
let info = uni.createSelectorQuery().in(this).select(".content"); |
|
|
|
info.boundingClientRect(function(data) { |
|
|
|
let count = Math.floor( parseInt(data.width) / 23 - 1 ); // 预留一个位置出来 |
|
|
|
that.count = count; |
|
|
|
that.show = true; |
|
|
|
}).exec(); |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
|
|
|
|
clickImage(index){ |
|
|
|
this.$emit('click', index); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
@ -28,7 +72,7 @@ |
|
|
|
display: flex; |
|
|
|
flex-wrap: nowrap; |
|
|
|
width: 100%; |
|
|
|
height: 60rpx; |
|
|
|
height: max-content; |
|
|
|
margin-top: 20rpx; |
|
|
|
.image-item{ |
|
|
|
width: 60rpx; |
|
|
|
@ -44,5 +88,13 @@ |
|
|
|
height: 100%; |
|
|
|
} |
|
|
|
} |
|
|
|
.image-surplus{ |
|
|
|
border: none; |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
color: #FFFFFF; |
|
|
|
font-size: 20rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |