123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <template>
- <view class="tui-roll-news"
- :style="{background:background,width:!width?'100%':width+'rpx',padding:padding,borderRadius:radius+'rpx'}">
- <view class="tui-notice__shrink" @tap.stop="leftClick">
- <slot></slot>
- </view>
- <swiper :vertical="vertical" :autoplay="true" :circular="true" :interval="interval"
- class="tui-roll__news-swiper" :style="{height:height+'rpx'}">
- <swiper-item v-for="(item,index) in list" :key="index" class="tui-roll__news-item">
- <text class="tui-rollnews__text"
- :style="{color:color,fontSize:size+'rpx',fontWeight:bold?'bold':'',lines:lines,'-webkit-line-clamp':lines}"
- @tap="onClick(index)">{{item[prop] || ''}}</text>
- </swiper-item>
- </swiper>
- <view class="tui-notice__shrink" @tap.stop="rightClick">
- <slot name="right"></slot>
- </view>
- </view>
- </template>
- <script>
- export default {
- name: "tui-roll-news",
- emits: ['click', 'leftClick', 'rightClick'],
- props: {
- list: {
- type: Array,
- default () {
- return []
- }
- },
- //list 显示key
- prop: {
- type: String,
- default: 'title'
- },
- width: {
- type: [Number, String],
- default: 0
- },
- //滚动消息高度
- height: {
- type: [Number, String],
- default: 80
- },
- //字体大小 rpx
- size: {
- type: [Number, String],
- default: 28
- },
- color: {
- type: String,
- default: '#333'
- },
- bold: {
- type: Boolean,
- default: false
- },
- background: {
- type: String,
- default: '#fff'
- },
- radius: {
- type: [Number, String],
- default: 0
- },
- padding: {
- type: String,
- default: '0 30rpx'
- },
- //内容显示行数,超出隐藏
- lines: {
- type: Number,
- default: 1
- },
- //自动切换时间间隔(毫秒)
- interval: {
- type: Number,
- default: 3000
- },
- //是否纵向滚动切换内容
- vertical: {
- type: Boolean,
- default: true
- }
- },
- data() {
- return {
- };
- },
- methods: {
- onClick(index) {
- const item = this.list[index]
- this.$emit('click', {
- index: index,
- item: item
- })
- },
- leftClick() {
- this.$emit('leftClick', {})
- },
- rightClick() {
- this.$emit('rightClick', {})
- }
- }
- }
- </script>
- <style scoped>
- .tui-roll-news {
- /* #ifndef APP-NVUE */
- display: flex;
- width: 100%;
- box-sizing: border-box;
- /* #endif */
- flex-direction: row;
- align-items: center;
- overflow: hidden;
- }
- .tui-notice__shrink {
- /* #ifndef APP-NVUE */
- flex-shrink: 0;
- display: flex;
- /* #endif */
- align-items: center;
- justify-content: center;
- /* #ifdef H5 */
- cursor: pointer;
- /* #endif */
- }
- .tui-roll__news-swiper {
- flex: 1;
- }
- .tui-roll__news-item {
- /* #ifndef APP-NVUE */
- width: 100%;
- display: flex;
- /* #endif */
- align-items: center;
- }
- .tui-rollnews__text {
- /* #ifndef APP-NVUE */
- display: -webkit-box;
- overflow: hidden;
- word-break: break-all;
- white-space: normal;
- -webkit-box-orient: vertical;
- /* #endif */
- overflow: hidden;
- }
- </style>
|