Vue 實(shí)現(xiàn)簡易多行滾動(dòng)"彈幕"效果
看一下效果:
實(shí)現(xiàn)任意行數(shù)的定時(shí)翻滾效果,不使用重復(fù)標(biāo)簽的方式,而是根據(jù)展示個(gè)數(shù)判斷是否缺省,并添加對(duì)應(yīng)展示個(gè)數(shù)的重復(fù)項(xiàng)來實(shí)現(xiàn)。
Vue 的演示代碼如下:
<template>
<div class="demo-comment-container">
<div
class="scroll-container"
:style="{height: `${height/100}rem`}"
>
<ul
class="scroll-ul"
:style="{transform: `translate3d(0, ${y/100}rem, 0)`, transition: `${transition}`}"
>
<div
v-for="(item, index) in list"
:key="index"
v-bind="baseStyle.style"
:bgColor="baseStyle.style.bgColor__bg"
:style="{ color: rgba(baseStyle.color__nf) }"
:class="['c-item-bg', 'c-item', !item.content && 'empty']"
>
<li
class="c-item"
>
<div class="avatar">
<img
v-if="item.content"
class="avatar-item"
:src="item.photo"
>
</div>
<div
v-if="item.content"
class="c-content"
v-html="item.content"
/>
</li>
</div>
</ul>
</div>
<div class="comment-entry">
<div class="f">
<div class="text-c">
<span
v-if="entry.type === 1"
class="text"
v-text="entry.text"
/>
<div
v-else
class="img-container"
>
<img :src="entry.image">
</div>
<i
v-if="count"
class="c-c"
>{{ count }}</i>
</div>
<div>
<span class="fake-input">來發(fā)表你的看法吧~</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
inject: ['rgba'],
props: {
urlConfig: {
type: Object,
default: function () {
return {}
}
},
type: {
type: String,
default: 'hot'
},
pageSize: {
type: Number,
default: 50
},
open: {
type: Boolean,
default: true
},
entry: {
type: Object,
default: function () {
return {
type: 1, // 1 文字 2 自定義
text: '',
image: ''
}
}
},
number: {
type: Number,
default: 2
},
},
data () {
return {
count: 2334,
dom: null,
height: 0, // 單項(xiàng)高度
y: 0, // 每次移動(dòng)距離
list: [], // 接口列表
originLength: 0, // 原始數(shù)組長度
transition: 'ease all .4s',
round: 0 // 需要滾動(dòng)多少輪
}
},
created () {
this.getCommentList()
},
mounted () {
this.dom = document.querySelector('.c-item')
// 計(jì)算可視區(qū)域高度
this.height = 64 * this.number + (12 * (this.number - 1))
},
methods: {
getCommentList () {
// 接口數(shù)據(jù)
const _list = []
this.originLength = _list.length
const mod = this.originLength % this.number
let need = this.originLength < this.number ? (this.number - this.originLength) : mod > 0 ? this.number - mod : 0 // 計(jì)算出要添加的空白元素個(gè)數(shù)
this.list = _list
// set empty item
const empty = JSON.parse(JSON.stringify(_list[0]))
empty.content = ''
// 補(bǔ)齊空白元素
while (need) {
this.list.push(empty)
need--
}
// 填充重復(fù)元素
let repeat = this.number
let index = 0
while (repeat) {
this.list.push(_list[index])
index++
repeat--
}
this.round = this.list.length / this.number
this.scroll()
},
scroll () {
let count = 1
setInterval(() => {
count++
this.y -= this.height + 12 // 移動(dòng)可視區(qū)域高度 + 最后一個(gè) item 的 margin-bottom
this.transition = '.4s ease all'
setTimeout(() => {
if (count === this.round) {
count = 1
this.transition = ''
this.y = 0
}
}, 800)
}, 2000)
}
}
}
</script>
總結(jié)
以上所述是小編給大家介紹的Vue 實(shí)現(xiàn)簡易多行滾動(dòng)"彈幕",希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的全過程
vue.js是現(xiàn)在流行的js框架之一,vue 是一套用于構(gòu)建用戶界面的漸進(jìn)式j(luò)avascript框架,這篇文章主要給大家介紹了關(guān)于vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的相關(guān)資料,需要的朋友可以參考下2021-05-05
Vue+Vite項(xiàng)目初建(axios+Unocss+iconify)的實(shí)現(xiàn)
一個(gè)好的項(xiàng)目開始搭建總是需要配置許多初始化配置,本文就來介紹一下Vue+Vite項(xiàng)目初建(axios+Unocss+iconify)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽機(jī)制問題及實(shí)現(xiàn)思路
這篇文章主要介紹了淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽機(jī)制問題及實(shí)現(xiàn)思路,需要的朋友可以參考下2018-11-11

