29 lines
1.1 KiB
Vue
29 lines
1.1 KiB
Vue
<template>
|
||
<div class="aa-imgprev-mask" v-if="visible" @click.self="$emit('close')">
|
||
<button class="aa-imgprev-close" @click="$emit('close')">✕</button>
|
||
<button class="aa-imgprev-arrow prev" @click="go(-1)">‹</button>
|
||
<img class="aa-imgprev-img" :src="images[index]" :alt="index" />
|
||
<button class="aa-imgprev-arrow next" @click="go(1)">›</button>
|
||
<div class="aa-imgprev-count">{{ index + 1 }} / {{ images.length }}</div>
|
||
<div class="aa-imgprev-thumbs">
|
||
<img v-for="(u, i) in images" :key="i" class="aa-imgprev-thumb" :class="{ 'is-active': i === index }"
|
||
:src="u" @click="$emit('change', i)" />
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: 'AaImagePreview',
|
||
props: { images: { type: Array, default: function () { return []; } }, visible: { type: Boolean, default: false }, index: { type: Number, default: 0 } },
|
||
methods: {
|
||
go: function (dir) {
|
||
var len = this.images.length || 1;
|
||
this.$emit('change', (this.index + dir + len) % len);
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style src="./ImagePreview.css"></style>
|