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

141 lines
2.4 KiB

<template>
<view @click.stop="$emit('click')" class="niu-image" :class="[inline?'niu-image--inline':'']" :style="[customStyle]">
<image v-if="preview" @click.stop="clickPreview" class="image" :mode="mode" :src="src"
:style="{borderRadius: radius,border:border}" :class="[circle?'niu-image--circle':'']"></image>
<image v-if="!preview" class="image" :mode="mode" :src="src" :style="{borderRadius: radius,border:border}"
:class="[circle?'niu-image--circle':'']"></image>
</view>
</template>
<script>
export default {
props: {
mode: {
type: String,
default: 'scaleToFill'
},
radius: {
type: String,
default: ''
},
border: {
type: String,
default: ''
},
src: {
type: String,
default: ""
},
width: {
type: String,
default: ""
},
inline: {
type: Boolean,
default: false
},
height: {
type: String,
default: ''
},
circle: {
type: Boolean,
default: false
},
rect: {
type: String,
default: ''
},
preview: {
type: Boolean,
default: false
},
left: {
type: String,
default: ''
},
right: {
type: String,
default: ''
},
top: {
type: String,
default: ''
},
bottom: {
type: String,
default: ''
},
margin: {
type: String,
default: ''
}
},
data() {
return {
};
},
methods: {
clickPreview(e) {
if (!this.preview) {
return
}
uni.previewImage({
urls: [this.src]
})
}
},
computed: {
customStyle() {
let style = {};
if (this.left) {
style.marginLeft = this.left
}
if (this.right) {
style.marginRight = this.right
}
if (this.top) {
style.marginTop = this.top
}
if (this.bottom) {
style.marginBottom = this.bottom
}
if (this.margin) {
style.margin = this.margin
}
let obj = {
width: this.width ? this.width : this.rect ? this.rect : '100%',
height: this.height ? this.height : this.rect ? this.rect : '100%',
...style
}
return obj
}
},
}
</script>
<style lang="scss" scoped>
.niu-image {
// 不要设置inline-block,会出问题
&--circle {
border-radius: 50%;
overflow: hidden;
}
&--inline {
display: inline-block;
line-height: 1;
}
font-size: 0;
.image {
display: block;
width: 100%;
height: 100%;
}
}
</style>