在Vue中使用CSS3實(shí)現(xiàn)內(nèi)容無縫滾動(dòng)的示例代碼
一、效果預(yù)覽
最近在做一個(gè)活動(dòng)頁面,遇到幸運(yùn)用戶中獎(jiǎng)的滾動(dòng)公告需求。下面是實(shí)現(xiàn)效果:

(gif錄制略顯卡頓,實(shí)際效果很流暢)
二、無縫滾動(dòng)原理
1、容器寬高固定,超出內(nèi)容隱藏;
2、內(nèi)容準(zhǔn)備2份,現(xiàn)參與滾動(dòng)的內(nèi)容有A、B兩份,向左滾動(dòng);
3、滑動(dòng)過程中,B份緊隨A份之后,營(yíng)造出無縫滾動(dòng)回來的效果;
4、在A部分內(nèi)容完全滾出容器的一瞬間,立刻將AB內(nèi)容位置復(fù)原,由于A、B內(nèi)容一模一樣,這個(gè)復(fù)原過程很難看出來;
5、循環(huán)第3步;

三、代碼
1、html部分
<template>
<div class="lucky-user"> <!-- 容器 -->
<ul class="user-list" :style="`animation-duration: ${luckyUsers.length * 4}s;`"> <!-- 內(nèi)容區(qū)容器 -->
<li v-for="(item, index) in luckyUsers" :key="index">{{ item }}</li> <!-- 內(nèi)容A -->
<li v-for="(item, index) in luckyUsers" :key="index+'copy'">{{ item }}</li> <!-- 內(nèi)容B -->
</ul>
</div>
</template>
2、CSS部分
.lucky-user {
width: 540px; //容器定寬高
height: 30px;
margin: 0 auto;
font-size: 18px;
line-height: 30px;
color: #E9B65F;
overflow: hidden; //超出內(nèi)容隱藏
.user-list {
width: fit-content; // Q1
white-space: nowrap; // 內(nèi)容不換行
animation-name: seamless-scrolling; // Q3
animation-timing-function: linear; // 動(dòng)畫速度曲線,勻速
animation-iteration-count: infinite; // 動(dòng)畫循環(huán)無限次播放
li {
display: inline-block;
margin-right: 30px;
}
}
}
@keyframes seamless-scrolling {
0% {
transform: translateX(0px);
}
100% {
transform: translateX(-50%); //Q2
}
}
Q1:因?yàn)闈L動(dòng)內(nèi)容一般都不是固定的,需要接口獲取,所以內(nèi)容區(qū)的寬度也就無法確定,這里使用CSS3的新特性width: fit-content,使寬度自適應(yīng)內(nèi)部?jī)?nèi)容,至于為什么這里需要設(shè)置寬度屬性,見下文
Q2:設(shè)置動(dòng)畫。由于內(nèi)容區(qū)實(shí)際有AB兩份,B是A的副本,所以一段動(dòng)畫的終點(diǎn)就是內(nèi)容區(qū)向左位移50%(內(nèi)容區(qū)width的50%),這也就解釋了Q1中為什么一定要設(shè)置寬度屬性了:如果不設(shè)置,width的值不會(huì)隨內(nèi)容撐開,此時(shí)的50%是父容器width的50%,終點(diǎn)值就錯(cuò)了
Q3:為什么animation不采用簡(jiǎn)寫形式,而是拆開? 因?yàn)閍nimation-duration 動(dòng)畫時(shí)長(zhǎng)不能固定,如果接口獲取到的數(shù)據(jù)很多,動(dòng)畫時(shí)長(zhǎng)固定5s,那滾動(dòng)地得有多快?所以animation-duration采用屬性綁定形式,根據(jù)數(shù)據(jù)長(zhǎng)度進(jìn)行延長(zhǎng) :style="animation-duration: ${luckyUsers.length * 4}s;" 具體乘幾看自己喜歡。
我也試過采用簡(jiǎn)寫形式進(jìn)行style屬性綁定,結(jié)果發(fā)現(xiàn)動(dòng)畫不生效。
3、JS部分
export default {
name: 'app',
data() {
return {
luckyUsers: []
}
},
created() {
this.getLuckyUsersList()
},
methods: {
getLuckyUsersList () {
//調(diào)接口拿取數(shù)據(jù)
this.luckyUsers = [
'000000抽中了xxx獎(jiǎng)品',
'111111抽中了xxx獎(jiǎng)品',
'222222抽中了xxx獎(jiǎng)品',
]
}
}
}
四、總結(jié)
無縫滾動(dòng)的實(shí)現(xiàn)主要借助了css3中的animation、width:fit-content自適應(yīng)屬性、translate位移等特性;
從實(shí)現(xiàn)原理上看,其實(shí)就是一個(gè)欺騙眼睛的小伎倆而已~
到此這篇關(guān)于在Vue中使用CSS3實(shí)現(xiàn)內(nèi)容無縫滾動(dòng)的示例代碼的文章就介紹到這了,更多相關(guān)Vue CSS3無縫滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于vue-seamless-scroll實(shí)現(xiàn)無縫滾動(dòng)效果
- vue-seamless-scroll無縫滾動(dòng)組件使用方法詳解
- vue實(shí)現(xiàn)無限消息無縫滾動(dòng)
- vue實(shí)現(xiàn)簡(jiǎn)單無縫滾動(dòng)效果
- vue實(shí)現(xiàn)列表無縫滾動(dòng)效果
- vue實(shí)現(xiàn)列表垂直無縫滾動(dòng)
- vue3實(shí)現(xiàn)CSS無限無縫滾動(dòng)效果
- vue實(shí)現(xiàn)列表無縫滾動(dòng)
- vue的無縫滾動(dòng)組件vue-seamless-scroll實(shí)例
- vue實(shí)現(xiàn)公告消息橫向無縫循環(huán)滾動(dòng)
相關(guān)文章
Vue3+TS+Vant3+Pinia(H5端)配置教程詳解
這篇文章主要介紹了Vue3+TS+Vant3+Pinia(H5端)配置教程詳解,需要的朋友可以參考下2023-01-01
vue composition-api 封裝組合式函數(shù)的操作方法
在 Vue 應(yīng)用的概念中,“組合式函數(shù)”(Composables) 是一個(gè)利用 Vue 的組合式 API 來封裝和復(fù)用有狀態(tài)邏輯的函數(shù),這篇文章主要介紹了vue composition-api 封裝組合式函數(shù)的操作方法,需要的朋友可以參考下2022-10-10
vue實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示隱藏
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
基于vue項(xiàng)目設(shè)置resolves.alias: ''@''路徑并適配webstorm
這篇文章主要介紹了基于vue項(xiàng)目設(shè)置resolves.alias: '@'路徑并適配webstorm,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼
在開發(fā)中我們需要一種能夠統(tǒng)一團(tuán)隊(duì)代碼風(fēng)格的工具,作為強(qiáng)制性的規(guī)范,統(tǒng)一整個(gè)項(xiàng)目的代碼風(fēng)格,這篇文章主要介紹了詳解如何在vue項(xiàng)目中使用eslint+prettier格式化代碼,需要的朋友可以參考下2018-11-11
vue 使用微信jssdk,調(diào)用微信相冊(cè)上傳圖片功能
這篇文章主要介紹了vue 使用微信jssdk,調(diào)用微信相冊(cè)上傳圖片功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別
Element-UI作為前端框架,最常使用到的就是表單驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

