一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - 在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼

在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼

2021-11-24 16:20南客Nanky JavaScript

這篇文章主要介紹了在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、效果預(yù)覽

最近在做一個活動頁面,遇到幸運用戶中獎的滾動公告需求。下面是實現(xiàn)效果:

在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼

(gif錄制略顯卡頓,實際效果很流暢)

二、無縫滾動原理

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

在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼

三、代碼

1、html部分

?
1
2
3
4
5
6
7
8
<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部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.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; // 動畫速度曲線,勻速
    animation-iteration-count: infinite; // 動畫循環(huán)無限次播放
    li {
      display: inline-block;
      margin-right: 30px;
    }
  }
}
 
@keyframes seamless-scrolling {
  0% {
    transform: translateX(0px);
  }
  100% {
    transform: translateX(-50%); //Q2
  }
}

Q1:因為滾動內(nèi)容一般都不是固定的,需要接口獲取,所以內(nèi)容區(qū)的寬度也就無法確定,這里使用CSS3的新特性width: fit-content,使寬度自適應(yīng)內(nèi)部內(nèi)容,至于為什么這里需要設(shè)置寬度屬性,見下文
Q2:設(shè)置動畫。由于內(nèi)容區(qū)實際有AB兩份,B是A的副本,所以一段動畫的終點就是內(nèi)容區(qū)向左位移50%(內(nèi)容區(qū)width的50%),這也就解釋了Q1中為什么一定要設(shè)置寬度屬性了:如果不設(shè)置,width的值不會隨內(nèi)容撐開,此時的50%是父容器width的50%,終點值就錯了
Q3:為什么animation不采用簡寫形式,而是拆開? 因為animation-duration 動畫時長不能固定,如果接口獲取到的數(shù)據(jù)很多,動畫時長固定5s,那滾動地得有多快?所以animation-duration采用屬性綁定形式,根據(jù)數(shù)據(jù)長度進行延長  :style="animation-duration: ${luckyUsers.length * 4}s;" 具體乘幾看自己喜歡。
我也試過采用簡寫形式進行style屬性綁定,結(jié)果發(fā)現(xiàn)動畫不生效。

3、JS部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
export default {
 name: 'app',
  data() {
   return {
    luckyUsers: []
   }
  },
  created() {
   this.getLuckyUsersList()
  },
  methods: {
   getLuckyUsersList () {
     //調(diào)接口拿取數(shù)據(jù)
     this.luckyUsers = [
      '000000抽中了xxx獎品',
      '111111抽中了xxx獎品',
      '222222抽中了xxx獎品',
     ]
    }
  }
}

四、總結(jié)

無縫滾動的實現(xiàn)主要借助了css3中的animation、width:fit-content自適應(yīng)屬性、translate位移等特性;
從實現(xiàn)原理上看,其實就是一個欺騙眼睛的小伎倆而已~

到此這篇關(guān)于在Vue中使用CSS3實現(xiàn)內(nèi)容無縫滾動的示例代碼的文章就介紹到這了,更多相關(guān)Vue CSS3無縫滾動內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/6899280789851914253

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 啪啪模拟器 | 青草精品| 男女精品视频 | 国产亚洲福利精品一区 | 免费网站看v片在线香蕉 | 国产3344视频在线观看免费 | 欧美cosplay极品video | 国产欧美综合精品一区二区 | 国产caonila在线观看 | 操破苍穹小说 | 久久精品国产亚洲AV蜜臀 | 日本道在线播放 | 性伴交换多p | 精品亚洲国产一区二区 | 好大好热 | 黑人巨鞭大战白妞10级 | 成年人免费在线看的惊悚动作片 | 欧美生活一级片 | 午夜尤物| 亚洲男人天 | 国亚洲欧美日韩精品 | 日韩在线视精品在亚洲 | 亚洲欧美日韩精品高清 | 91精品综合 | 我被黄总征服的全过程 | 亚洲精品m在线观看 | 日韩亚洲欧美理论片 | 国产午夜精品一区二区三区不卡 | 久久99re8热在线播放 | 范冰冰a级一级特级毛片 | hd最新国产人妖ts视频 | 美女被爆操 | 91久久国产综合精品 | 国内精品视频一区二区三区八戒 | 麻豆视频免费在线观看 | 湿好紧太硬了我太爽了 | 国产一区在线免费观看 | 日韩在线天堂 | 男人好大好硬好爽免费视频 | 四虎影视在线观看2413 | 羞羞答答免费人成黄页在线观看国产 |