293 lines
5.9 KiB
Vue
293 lines
5.9 KiB
Vue
<template>
|
||
<view class="xzw_notice" :style="{color:getColor(theme),backgroundColor:getBgColor(theme)}">
|
||
<uni-icons v-if="showIcon === true || showIcon === 'true'" class="notice_left" type="sound" :color="getColor(theme)" size="22" />
|
||
<swiper class="notice_center" vertical v-if="direction=='column'" :autoplay="true" :interval="4000" :duration="500" :circular="true" disable-touch>
|
||
<swiper-item v-for="(item, index) in list" :key="index" class="swiperIn" @click="goItem(item)">
|
||
<view>{{item[theKey]}}</view>
|
||
</swiper-item>
|
||
</swiper>
|
||
<view :class="['','notice_center1','notice_center2','notice_center3','notice_center4','notice_center5'][speedTime]" v-else><view class="content">{{list[0][theKey]}}</view></view>
|
||
<view class="notice_right" v-if="showMore">
|
||
<view @click="goMore">更多</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name:"notice-one",
|
||
props:{
|
||
// 速度
|
||
speed: {
|
||
type:Number,
|
||
default:1
|
||
},
|
||
//主题色,default|primary|error|warning|success|info
|
||
theme: {
|
||
type: String,
|
||
default: 'default'
|
||
},
|
||
// 是否显示左侧icon
|
||
showIcon: {
|
||
type: [Boolean, String],
|
||
default: false
|
||
},
|
||
// 是否显示更多
|
||
showMore: {
|
||
type: [Boolean, String],
|
||
default: false
|
||
},
|
||
list: {
|
||
type: Array,
|
||
default() {
|
||
return [{id:1,title:'公告1'},{id:2,title:'公告2'}]
|
||
}
|
||
},
|
||
//公告数组的键名
|
||
theKey:{
|
||
type: String,
|
||
default: 'title'
|
||
},
|
||
//方向,column垂直,row水平时取第一条公告
|
||
direction:{
|
||
type: String,
|
||
default: 'column'
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
text:'',
|
||
speedTime:1
|
||
};
|
||
},
|
||
mounted() {
|
||
// 缓存状态栏+标题栏的高度
|
||
const query = wx.createSelectorQuery().in(this)
|
||
query.select('.content').boundingClientRect((rect) => {
|
||
console.log(rect.width);
|
||
let newWidth = rect.width;
|
||
if(newWidth <=420) {
|
||
this.speedTime = 1;
|
||
}
|
||
if(newWidth >= 420 && newWidth < 720) {
|
||
this.speedTime = 2;
|
||
}
|
||
if(newWidth >= 720 && newWidth < 820) {
|
||
this.speedTime = 3;
|
||
}
|
||
if(newWidth >= 820 && newWidth < 920) {
|
||
this.speedTime = 4;
|
||
}
|
||
if(newWidth >= 920) {
|
||
this.speedTime = 5;
|
||
}
|
||
}).exec()
|
||
},
|
||
methods:{
|
||
getColor(theme){
|
||
if(theme=="primary"){
|
||
return "#2979FF"
|
||
}else if(theme=="error"){
|
||
return "#FA3534"
|
||
}else if(theme=="warning"){
|
||
return "#FF9A43"
|
||
}else if(theme=="success"){
|
||
return "#1BBF6C"
|
||
}else if(theme=="info"){
|
||
return "#909399"
|
||
}else{
|
||
return "#303133"
|
||
}
|
||
},
|
||
getBgColor(theme){
|
||
if(theme=="primary"){
|
||
return "#ECF5FF"
|
||
}else if(theme=="error"){
|
||
return "#FEF0F0"
|
||
}else if(theme=="warning"){
|
||
return "#FDF6EC"
|
||
}else if(theme=="success"){
|
||
return "#DBF1E1"
|
||
}else if(theme=="info"){
|
||
return "#F4F4F5"
|
||
}else{
|
||
return "#FFFFFF"
|
||
}
|
||
},
|
||
goItem(item){
|
||
uni.navigateTo({
|
||
url:`/pagesB/notice-detail/notice-detail?id=${item.id}`
|
||
})
|
||
},
|
||
goMore(){
|
||
uni.navigateTo({
|
||
url:`/pagesB/notice-list/notice-list`
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.xzw_notice {
|
||
font-size: 26upx;
|
||
height: 40upx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
.notice_left{
|
||
margin: 0 20upx 0 0;
|
||
}
|
||
.notice_center{
|
||
flex:1;
|
||
height:90upx;
|
||
.swiperIn{
|
||
height:80upx;
|
||
display: flex;
|
||
align-items: center;
|
||
view{
|
||
overflow: hidden;
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 1;
|
||
-webkit-box-orient: vertical;
|
||
}
|
||
}
|
||
}
|
||
.notice_center1{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 5s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
.notice_center1{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 5s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
.notice_center2{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 10s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
.notice_center3{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 15s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
.notice_center4{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 20s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
.notice_center5{
|
||
flex:1;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
height:90upx;
|
||
overflow: hidden;
|
||
view{
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
padding-left: 100%;
|
||
animation: notice 25s 0s linear infinite both;
|
||
}
|
||
}
|
||
.notice_right {
|
||
margin: 0 0 0 20upx;
|
||
}
|
||
@keyframes notice {
|
||
100% {
|
||
transform: translate3d(-100%, 0, 0);
|
||
}
|
||
}
|
||
}
|
||
</style>
|