<template>
<view
class="u-notice-bar"
:style="{
background: computeBgColor,
padding: padding
}"
:class="[
type ? `u-type-${type}-light-bg` : ''
]"
>
<view class="u-icon-wrap">
<u-icon class="u-left-icon" v-if="volumeIcon" name="volume-fill" :size="volumeSize" :color="computeColor"></u-icon>
</view>
<swiper :disable-touch="disableTouch" @change="change" :autoplay="autoplay && playState == 'play'" :vertical="vertical" circular :interval="duration" class="u-swiper">
<swiper-item v-for="(item, index) in list" :key="index" class="u-swiper-item">
<view
class="u-news-item u-line-1"
:style="[textStyle]"
@tap="click(index)"
:class="['u-type-' + type]"
>
{{ item }}
</view>
</swiper-item>
</swiper>
<view class="u-icon-wrap">
<u-icon @click="getMore" class="u-right-icon" v-if="moreIcon" name="arrow-right" :size="26" :color="computeColor"></u-icon>
<u-icon @click="close" class="u-right-icon" v-if="closeIcon" name="close" :size="24" :color="computeColor"></u-icon>
</view>
</view>
</template>
<script>
export default {
props: {
list: {
type: Array,
default() {
return [];
}
},
type: {
type: String,
default: 'warning'
},
volumeIcon: {
type: Boolean,
default: true
},
moreIcon: {
type: Boolean,
default: false
},
closeIcon: {
type: Boolean,
default: false
},
autoplay: {
type: Boolean,
default: true
},
color: {
type: String,
default: ''
},
bgColor: {
type: String,
default: ''
},
direction: {
type: String,
default: 'row'
},
show: {
type: Boolean,
default: true
},
fontSize: {
type: [Number, String],
default: 26
},
duration: {
type: [Number, String],
default: 2000
},
volumeSize: {
type: [Number, String],
default: 34
},
speed: {
type: Number,
default: 160
},
isCircular: {
type: Boolean,
default: true
},
mode: {
type: String,
default: 'horizontal'
},
playState: {
type: String,
default: 'play'
},
disableTouch: {
type: Boolean,
default: true
},
padding: {
type: [Number, String],
default: '18rpx 24rpx'
}
},
computed: {
computeColor() {
if (this.color) return this.color;
else if(this.type == 'none') return '#606266';
else return this.type;
},
textStyle() {
let style = {};
if (this.color) style.color = this.color;
else if(this.type == 'none') style.color = '#606266';
style.fontSize = this.fontSize + 'rpx';
return style;
},
vertical() {
if(this.mode == 'horizontal') return false;
else return true;
},
computeBgColor() {
if (this.bgColor) return this.bgColor;
else if(this.type == 'none') return 'transparent';
}
},
data() {
return {
};
},
methods: {
click(index) {
this.$emit('click', index);
},
close() {
this.$emit('close');
},
getMore() {
this.$emit('getMore');
},
change(e) {
let index = e.detail.current;
if(index == this.list.length - 1) {
this.$emit('end');
}
}
}
};
</script>
<style lang="scss" scoped>
@import "../../libs/css/style.components.scss";
.u-notice-bar {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: nowrap;
padding: 18rpx 24rpx;
overflow: hidden;
}
.u-swiper {
font-size: 26rpx;
height: 32rpx;
display: flex;
align-items: center;
flex: 1;
margin-left: 12rpx;
}
.u-swiper-item {
display: flex;
align-items: center;
overflow: hidden;
}
.u-news-item {
overflow: hidden;
}
.u-right-icon {
margin-left: 12rpx;
display: inline-flex;
align-items: center;
}
.u-left-icon {
display: inline-flex;
align-items: center;
}
</style>