New file |
| | |
| | | <template> |
| | | <view |
| | | class="u-notice" |
| | | @tap="clickHandler" |
| | | > |
| | | <slot name="icon"> |
| | | <view |
| | | class="u-notice__left-icon" |
| | | v-if="icon" |
| | | > |
| | | <u-icon |
| | | :name="icon" |
| | | :color="color" |
| | | size="19" |
| | | ></u-icon> |
| | | </view> |
| | | </slot> |
| | | <swiper |
| | | :disable-touch="disableTouch" |
| | | :vertical="step ? false : true" |
| | | circular |
| | | :interval="duration" |
| | | :autoplay="true" |
| | | class="u-notice__swiper" |
| | | @change="noticeChange" |
| | | > |
| | | <swiper-item |
| | | v-for="(item, index) in text" |
| | | :key="index" |
| | | class="u-notice__swiper__item" |
| | | > |
| | | <text |
| | | class="u-notice__swiper__item__text u-line-1" |
| | | :style="[textStyle]" |
| | | >{{ item }}</text> |
| | | </swiper-item> |
| | | </swiper> |
| | | <view |
| | | class="u-notice__right-icon" |
| | | v-if="['link', 'closable'].includes(mode)" |
| | | > |
| | | <u-icon |
| | | v-if="mode === 'link'" |
| | | name="arrow-right" |
| | | :size="17" |
| | | :color="color" |
| | | ></u-icon> |
| | | <u-icon |
| | | v-if="mode === 'closable'" |
| | | name="close" |
| | | :size="16" |
| | | :color="color" |
| | | @click="close" |
| | | ></u-icon> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | /** |
| | | * ColumnNotice 滚动通知中的垂直滚动 内部组件 |
| | | * @description 该组件用于滚动通告场景,是其中的垂直滚动方式 |
| | | * @tutorial https://www.uviewui.com/components/noticeBar.html |
| | | * @property {Array} text 显示的内容,字符串 |
| | | * @property {String} icon 是否显示左侧的音量图标 ( 默认 'volume' ) |
| | | * @property {String} mode 通告模式,link-显示右箭头,closable-显示右侧关闭图标 |
| | | * @property {String} color 文字颜色,各图标也会使用文字颜色 ( 默认 '#f9ae3d' ) |
| | | * @property {String} bgColor 背景颜色 ( 默认 '#fdf6ec' ) |
| | | * @property {String | Number} fontSize 字体大小,单位px ( 默认 14 ) |
| | | * @property {String | Number} speed 水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 ( 默认 80 ) |
| | | * @property {Boolean} step direction = row时,是否使用步进形式滚动 ( 默认 false ) |
| | | * @property {String | Number} duration 滚动一个周期的时间长,单位ms ( 默认 1500 ) |
| | | * @property {Boolean} disableTouch 是否禁止用手滑动切换 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 ( 默认 true ) |
| | | * @example |
| | | */ |
| | | export default { |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin,props], |
| | | watch: { |
| | | text: { |
| | | immediate: true, |
| | | handler(newValue, oldValue) { |
| | | if(!uni.$u.test.array(newValue)) { |
| | | uni.$u.error('noticebar组件direction为column时,要求text参数为数组形式') |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | // 文字内容的样式 |
| | | textStyle() { |
| | | let style = {} |
| | | style.color = this.color |
| | | style.fontSize = uni.$u.addUnit(this.fontSize) |
| | | return style |
| | | }, |
| | | // 垂直或者水平滚动 |
| | | vertical() { |
| | | if (this.mode == 'horizontal') return false |
| | | else return true |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | index:0 |
| | | } |
| | | }, |
| | | methods: { |
| | | noticeChange(e){ |
| | | this.index = e.detail.current |
| | | }, |
| | | // 点击通告栏 |
| | | clickHandler() { |
| | | this.$emit('click', this.index) |
| | | }, |
| | | // 点击关闭按钮 |
| | | close() { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../libs/css/components.scss"; |
| | | |
| | | .u-notice { |
| | | @include flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | &__left-icon { |
| | | align-items: center; |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | &__right-icon { |
| | | margin-left: 5px; |
| | | align-items: center; |
| | | } |
| | | |
| | | &__swiper { |
| | | height: 16px; |
| | | @include flex; |
| | | align-items: center; |
| | | flex: 1; |
| | | |
| | | &__item { |
| | | @include flex; |
| | | align-items: center; |
| | | overflow: hidden; |
| | | |
| | | &__text { |
| | | font-size: 14px; |
| | | color: $u-warning; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |