日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫

這篇文章給大家分享的是有關(guān)怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新新互聯(lián),憑借10多年的成都網(wǎng)站設(shè)計、網(wǎng)站制作經(jīng)驗(yàn),本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計網(wǎng)站有上千案例。做網(wǎng)站建設(shè),選成都創(chuàng)新互聯(lián)。

之前在群里有個朋友問了這樣一個問題, 就是如何在 小程序中實(shí)現(xiàn)類似 直播平臺的用戶上線時的 隊列動畫? 作為一名前端工程師, 解決方案無非以下2種:

  • 使用 javascript根據(jù)條件來控制元素的樣式實(shí)現(xiàn)隊列動畫

  • 用純 css3配合數(shù)據(jù)驅(qū)動模型來實(shí)現(xiàn).

大家都知道在現(xiàn)代的 Web開發(fā)中, 我們能使用 Css實(shí)現(xiàn)的效果盡量不要用 Js, 所以我們應(yīng)該優(yōu)先考慮用 Css3來實(shí)現(xiàn),但是我們要結(jié)合 數(shù)據(jù)流才能實(shí)現(xiàn)真正的隊列動畫, 所以我們可以利用 MVVM框架便捷的數(shù)據(jù)驅(qū)動模型來控制動畫的走向.

又由于動畫的核心在于 Css3, 所以在 小程序或者是 Vue/React中實(shí)現(xiàn)其實(shí)原理都是相似的, 大家不必?fù)?dān)心技術(shù)棧的問題. 以下是實(shí)現(xiàn)后的效果圖:

怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫

其實(shí)這種效果在很多地方都用到, 比如 B站的彈幕, 某音樂平臺直播的粉絲上線動畫, 某音的直播等等, 而在 Web端, 我們又能怎么實(shí)現(xiàn)它呢? 接下來筆者將帶大家一步步實(shí)現(xiàn)這樣的動畫效果.

正文

要想實(shí)現(xiàn)上面的動畫效果, 我們需要先分析一下動畫, 上圖的動畫結(jié)構(gòu)如下:

怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫

動畫一共分為以下兩個過程:

  • 用戶進(jìn)入動畫

  • 用戶淡出動畫

還有一個細(xì)節(jié)就是不管進(jìn)入多少個用戶, 都是從同一個位置進(jìn)入的, 此時上一個用戶位置會上移,如下圖所示:

怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫 

所以要想實(shí)現(xiàn)這樣的效果最好的方式就是使用定位,比如絕對定位( absolute)或者固定定位( fixed). 并設(shè)置其 bottom

值, 如下代碼所示:

.animateWrap {
    position: absolute;
    bottom: 40%;
    left: 12px;
}

以上位置信息僅供參考,具體數(shù)值可根據(jù)自身需求來更改.設(shè)置 bottom的好處是容器的子元素一旦增加, 會自動將上一個元素頂上去, 所以不需要我們手動去設(shè)置其偏移值.

實(shí)現(xiàn)進(jìn)入動畫

我們要想實(shí)現(xiàn)上圖的用戶進(jìn)入動畫, 可以使用 Css3的過渡動畫 transition,也可以使用 animation動畫, 由于使用場景的便捷性這里我們采用 animation動畫, 首先我們先寫一下dom結(jié)構(gòu):

 
    
李老師上線
    
李老師上線
    
李老師上線
  

以上代碼表示創(chuàng)建了一個動畫容器, 并且添加了2個用戶, 這里我們定義一下關(guān)鍵動畫如下:

.animate {
      margin-bottom: 10px;
      border-radius: 20px;
      background-color: rgba(0,0,0, .3);
      animation: moveIn 1.2s;
    }
@keyframes moveIn {
  0% {
    transform: translateX(calc(-100% - 12px));
  }
  100% {
    transform: translateX(0);
  }
}

以上即實(shí)現(xiàn)了元素向右移入的動畫, 但是此時我們看到的動畫是同時出現(xiàn)的, 我們要應(yīng)用到真實(shí)場景中, 一定是通過 socket或者通過 輪循拿到的異步數(shù)據(jù), 因此我們可以使用 setInterval來模擬這一過程. 還有一個細(xì)節(jié)是我們動畫里最多只完整展示2條用戶數(shù)據(jù), 多余的數(shù)據(jù)會漸出隱藏, 因此我們需要對數(shù)據(jù)進(jìn)行截流, 代碼如下:

 const [user, setUser] = useState>([])
  useEffect(() => {
    let MAX_USER_COUNT = 2;
    let timer = setInterval(() => {
      setUser(prev => {
        prev.push(Date.now() + '')
        if(prev.length > MAX_USER_COUNT + 1){
          prev.shift()
          return [...prev]
        }else {
          return [...prev]
        }
      })
    }, 2000)
  }, [])

變量 MAX_USER_COUNT用來控制最大展示的用戶數(shù),可以根據(jù)實(shí)際需求更改, setUser里面的邏輯即為截流邏輯, 當(dāng)用戶數(shù)超過指定的最大值時, 會將頭部元素刪除.

以上即完成了數(shù)據(jù)流轉(zhuǎn)的過程, 我們還需要處理的是用戶漸出邏輯和動畫.我們先看看漸出的 animation:

@keyframes moveOut {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

其實(shí)動畫并不難, 我們需要控制的是如何給頭部元素動態(tài)的添加這個動畫, 此時我們最好的方案是通過類名, 即當(dāng)滿足漸出的條件時, 我們需要給漸出的元素動態(tài)設(shè)置漸出類名, 條件如下:

user.length > MAX_USER_COUNT && i === 0以上條件指的是當(dāng)用戶數(shù)超過最大展示用戶數(shù)并且當(dāng)且元素為頭部元素時, 那么我們只需要根據(jù)這個條件來動態(tài)設(shè)置類名即可:

{
  user.map((item, i) => {
     return   2 && i === 0 ? styles.hidden : '')} key={item}>
李老師{item}上線
  }) }

css代碼如下:

.hidden {
  opacity: 0;
  animation: moveOut 1.2s;
}

通過以上步驟我們就實(shí)現(xiàn)了一個完整的類在線直播的隊列動畫, 動畫完整 css代碼如下, 感興趣的盆友可以學(xué)習(xí)參考一下:

.animateWrap {
    position: absolute;
    bottom: 40%;
    left: 12px;
    .animate {
      margin-bottom: 10px;
      border-radius: 20px;
      background-color: rgba(0,0,0, .3);
      animation: moveIn 1.2s;
      .tx {
        display: inline-block;
        width: 36px;
        height: 36px;
        border-radius: 50%;
        overflow: hidden;
        vertical-align: middle;
        margin-right: 10px;
        img {
          width: 100%;
          height: 100%;
          object-fit: cover;
        }
      }
      span {
        margin-right: 12px;
        line-height: 36px;
        font-size: 14px;
        color: #fff;
      }
    }
    .hidden {
      opacity: 0;
      animation: moveOut 1.2s;
    }
    @keyframes moveIn {
      0% {
        transform: translateX(calc(-100% - 12px));
      }
      100% {
        transform: translateX(0);
      }
    }
    @keyframes moveOut {
      0% {
        opacity: 1;
      }
      100% {
        opacity: 0;
      }
    }
  }

感謝各位的閱讀!關(guān)于“怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


網(wǎng)站標(biāo)題:怎么使用css3實(shí)現(xiàn)一個類在線直播的隊列動畫
URL地址:http://www.dlmjj.cn/article/ipshej.html