You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
3.2 KiB
Vue

2 years ago
<template>
<view
class="tui-image-container"
:style="{ marginBottom: multiLine ? `-${distance}rpx` : 0 }"
:class="{ 'tui-image-direction': direction == 'column', 'tui-image__warp': multiLine }"
>
<view
v-for="(item, index) in imageList"
:key="index"
class="tui-image__itembox"
:style="{
width: width,
height: height,
borderRadius: radius,
marginLeft: direction == 'column' || multiLine ? 0 : (index && distance) + 'rpx',
marginRight: multiLine ? distance + 'rpx' : 0,
marginBottom: multiLine ? distance + 'rpx' : 0,
marginTop: direction == 'row' ? 0 : (index && distance) + 'rpx'
}"
@tap="bindClick(index, item.id)"
>
<image
class="tui-image-item"
:mode="mode"
:lazy-load="lazyLoad"
fade-show="fadeShow"
:webp="webp"
:show-menu-by-longpress="longpress"
@error="error"
@load="load"
:style="{ width: width, height: height, borderRadius: radius, borderWidth: borderWidth, borderColor: borderColor }"
:src="item.src"
></image>
<slot></slot>
</view>
</view>
</template>
<script>
export default {
name: 'tuiImageGroup',
emits: ['errorEvent','loaded','click'],
props: {
//图片集合
/*
[{id:1,src:"1.png"}]
*/
imageList: {
type: Array,
default: () => {
return [];
}
},
//图片宽度
width: {
type: String,
default: '120rpx'
},
//图片高度
height: {
type: String,
default: '120rpx'
},
//图片边框宽度 rpx
borderWidth: {
type: String,
default: '0'
},
//图片边框颜色 可传rgba
borderColor: {
type: String,
default: '#fff'
},
//图片圆角
radius: {
type: String,
default: '50%'
},
//图片裁剪、缩放的模式
mode: {
type: String,
default: 'scaleToFill'
},
//图片懒加载。只针对page与scroll-view下的image有效
lazyLoad: {
type: Boolean,
default: true
},
//图片显示动画效果 | 仅App-nvue 2.3.4+ Android有效
fadeShow: {
type: Boolean,
default: true
},
//默认不解析 webP 格式,只支持网络资源 | 微信小程序2.9.0
webp: {
type: Boolean,
default: false
},
//开启长按图片显示识别小程序码菜单 | 微信小程序2.7.0
longpress: {
type: Boolean,
default: false
},
//是否组合排列
isGroup: {
type: Boolean,
default: false
},
//排列方向 row column
direction: {
type: String,
default: 'row'
},
//偏移距离 rpx
distance: {
type: [Number, String],
default: -16
},
//是否可多行展示,排列方向 row时生效distance需设置为大于0的数
multiLine: {
type: Boolean,
default: false
}
},
data() {
return {};
},
methods: {
error(e) {
this.$emit('errorEvent', e);
},
load(e) {
this.$emit('loaded', e);
},
bindClick(index, id) {
this.$emit('click', {
index: index,
id: id || ''
});
}
}
};
</script>
<style scoped>
.tui-image-container {
display: inline-flex;
align-items: center;
}
.tui-image-direction {
flex-direction: column;
}
.tui-image__warp {
flex-wrap: wrap;
}
.tui-image__itembox {
position: relative;
}
.tui-image-item {
border-style: solid;
flex-shrink: 0;
display: block;
}
</style>