返回顶部
首页 > 资讯 > 精选 >怎么使用css3实现一个类在线直播的队列动画
  • 611
分享到

怎么使用css3实现一个类在线直播的队列动画

2023-06-08 03:06:14 611人浏览 安东尼
摘要

这篇文章给大家分享的是有关怎么使用css3实现一个类在线直播的队列动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。之前在群里有个朋友问了这样一个问题, 就是如何在 小程序 中实现类似 直播平台 的用户上线时的

这篇文章给大家分享的是有关怎么使用css3实现一个类在线直播的队列动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

之前在群里有个朋友问了这样一个问题, 就是如何在 小程序 中实现类似 直播平台 的用户上线时的 队列动画 ? 作为一名前端工程师, 解决方案无非以下2种:

  • 使用 javascript 根据条件来控制元素的样式实现队列动画

  • 用纯 css3 配合数据驱动模型来实现.

大家都知道在现代的 Web 开发中, 我们能使用 Css 实现的效果尽量不要用 Js , 所以我们应该优先考虑用 Css3 来实现,但是我们要结合 数据流 才能实现真正的队列动画, 所以我们可以利用 MVVM框架 便捷的数据驱动模型来控制动画的走向.

又由于动画的核心在于 Css3 , 所以在 小程序 或者是 Vue/React 中实现其实原理都是相似的, 大家不必担心技术栈的问题. 以下是实现后的效果图:

怎么使用css3实现一个类在线直播的队列动画

其实这种效果在很多地方都用到, 比如 B站 的弹幕, 某音乐平台直播的粉丝上线动画, 某音的直播等等, 而在 Web端 , 我们又能怎么实现它呢? 接下来笔者将带大家一步步实现这样的动画效果.

正文

要想实现上面的动画效果, 我们需要先分析一下动画, 上图的动画结构如下:

怎么使用css3实现一个类在线直播的队列动画

动画一共分为以下两个过程:

  • 用户进入动画

  • 用户淡出动画

还有一个细节就是不管进入多少个用户, 都是从同一个位置进入的, 此时上一个用户位置会上移,如下图所示:

怎么使用css3实现一个类在线直播的队列动画 

所以要想实现这样的效果最好的方式就是使用定位,比如绝对定位( absolute )或者固定定位( fixed ). 并设置其 bottom

值, 如下代码所示:

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

以上位置信息仅供参考,具体数值可根据自身需求来更改.设置 bottom 的好处是容器的子元素一旦增加, 会自动将上一个元素顶上去, 所以不需要我们手动去设置其偏移值.

实现进入动画

我们要想实现上图的用户进入动画, 可以使用 Css3 的过渡动画 transition ,也可以使用 animation 动画, 由于使用场景的便捷性这里我们采用 animation 动画, 首先我们先写一下dom结构:

 <div className={styles.animateWrap}>    <div className={styles.animate} key={item}><div className={styles.tx}><img src={tx} alt=""/></div><span>李老师上线</span></div>    <div className={styles.animate} key={item}><div className={styles.tx}><img src={tx} alt=""/></div><span>李老师上线</span></div>    <div className={styles.animate} key={item}><div className={styles.tx}><img src={tx} alt=""/></div><span>李老师上线</span></div>  </div>

以上代码表示创建了一个动画容器, 并且添加了2个用户, 这里我们定义一下关键动画如下:

.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);  }}

以上即实现了元素向右移入的动画, 但是此时我们看到的动画是同时出现的, 我们要应用到真实场景中, 一定是通过 socket 或者通过 轮循 拿到的异步数据, 因此我们可以使用 setInterval 来模拟这一过程. 还有一个细节是我们动画里最多只完整展示2条用户数据, 多余的数据会渐出隐藏, 因此我们需要对数据进行截流, 代码如下:

 const [user, setUser] = useState<Array<string>>([])  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 用来控制最大展示的用户数,可以根据实际需求更改, setUser 里面的逻辑即为截流逻辑, 当用户数超过指定的最大值时, 会将头部元素删除.

以上即完成了数据流转的过程, 我们还需要处理的是用户渐出逻辑和动画.我们先看看渐出的 animation :

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

其实动画并不难, 我们需要控制的是如何给头部元素动态的添加这个动画, 此时我们最好的方案是通过类名, 即当满足渐出的条件时, 我们需要给渐出的元素动态设置渐出类名, 条件如下:

user.length > MAX_USER_COUNT && i === 0 以上条件指的是当用户数超过最大展示用户数并且当且元素为头部元素时, 那么我们只需要根据这个条件来动态设置类名即可:

{  user.map((item, i) => {     return  <div className={classnames(styles.animate, user.length > 2 && i === 0 ? styles.hidden : '')} key={item}><div className={styles.tx}><img src={tx} alt=""/></div><span>李老师{item}上线</span></div>  })}

CSS代码如下:

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

通过以上步骤我们就实现了一个完整的类在线直播的队列动画, 动画完整 css 代码如下, 感兴趣的盆友可以学习参考一下:

.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;      }    }  }

感谢各位的阅读!关于“怎么使用css3实现一个类在线直播的队列动画”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 怎么使用css3实现一个类在线直播的队列动画

本文链接: https://lsjlt.com/news/251481.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用css3实现一个类在线直播的队列动画
    这篇文章给大家分享的是有关怎么使用css3实现一个类在线直播的队列动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。之前在群里有个朋友问了这样一个问题, 就是如何在 小程序 中实现类似 直播平台 的用户上线时的 ...
    99+
    2023-06-08
  • 怎么在css3中使用less实现一个星空动画
    这期内容当中小编将会给大家带来有关怎么在css3中使用less实现一个星空动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先html文件结构很简单,如下:<div>  ...
    99+
    2023-06-08
  • css3中怎么实现一个垂直下拉动画菜单
    css3中怎么实现一个垂直下拉动画菜单,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。<nav>     &nb...
    99+
    2024-04-02
  • 使用CSS3怎么实现一个粒子动画效果
    本篇文章给大家分享的是有关使用CSS3怎么实现一个粒子动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。按钮点击粒子动画<div class="b...
    99+
    2023-06-08
  • 怎么用php实现一个队列
    PHP中可以使用数组来实现一个队列。下面是一个简单的PHP队列的实现示例:```phpclass Queue {private $q...
    99+
    2023-09-06
    php
  • 怎么用两个栈实现一个队列
    这篇文章主要讲解了“怎么用两个栈实现一个队列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用两个栈实现一个队列”吧!在正式开始之前,我们先来回顾一下栈和...
    99+
    2024-04-02
  • 使用css3怎么实现一个文字扫光渐变动画效果
    使用css3怎么实现一个文字扫光渐变动画效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。利用css3这个属性(背景剪裁):background-clip: b...
    99+
    2023-06-08
  • 怎么在Html5页面中使用JSON实现一个动画
    今天就跟大家聊聊有关怎么在Html5页面中使用JSON实现一个动画,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.demo.html里面有很多内联的东西,使用时堆积在页面内不好看仔...
    99+
    2023-06-09
  • 使用Html5怎么在移动端实现一个无缝滚动动画
    使用Html5怎么在移动端实现一个无缝滚动动画?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。html骨架其实很简单,最外面的<div>是做固定的窗口,里面的<...
    99+
    2023-06-09
  • 怎么在Andriod使用多线程实现一个轮播图功能
    这篇文章将为大家详细讲解有关怎么在Andriod使用多线程实现一个轮播图功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MainActivity了初始化控件。<xml ve...
    99+
    2023-05-30
    android 多线程
  • 使用canvas怎么绘制一个连线动画
    这篇文章将为大家详细讲解有关使用canvas怎么绘制一个连线动画,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。step1:绘制点首先创建个标签<canvas id="canv...
    99+
    2023-06-09
  • 怎么用CSS3和table标签实现一个圆形轨迹的动画
    小编给大家分享一下怎么用CSS3和table标签实现一个圆形轨迹的动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html:其实就是根据table标签把几个实心...
    99+
    2023-06-08
  • 怎么在java中利用数组实现一个环形队列
    本篇文章为大家展示了怎么在java中利用数组实现一个环形队列,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系...
    99+
    2023-06-14
  • 使用css3怎么实现一个煽动翅膀的蝴蝶
    今天就跟大家聊聊有关使用css3怎么实现一个煽动翅膀的蝴蝶,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。html<div id="butterfly&quo...
    99+
    2023-06-08
  • 怎么在Android应用中实现一个动画效果
    本篇文章给大家分享的是有关怎么在Android应用中实现一个动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android 三种动画详解帧动画一张张图片不断的切换,形成动...
    99+
    2023-05-31
    android roi
  • 使用Nginx-rtmp怎么实现一个直播媒体实时流效果
    使用Nginx-rtmp怎么实现一个直播媒体实时流效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。流程图12345671. 客户端A无法进行P2P穿透,请求业务服务器要进...
    99+
    2023-06-08
  • 怎么在jquery中使用fadeIn()实现一个淡入动画效果
    这篇文章给大家介绍怎么在jquery中使用fadeIn()实现一个淡入动画效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jquery是什么jquery是一个简洁而快速的JavaScript库,它具有独特的链式语法和...
    99+
    2023-06-14
  • 怎么在html5中使用canvas实现一个动态画饼状图
    怎么在html5中使用canvas实现一个动态画饼状图?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。先用canvas画实心圆//伪代码var canv...
    99+
    2023-06-09
  • 使用CSS3怎么实现一个切片式图片轮播效果
    使用CSS3怎么实现一个切片式图片轮播效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语...
    99+
    2023-06-08
  • 使用css3怎么实现一个动感波浪效果
    使用css3怎么实现一个动感波浪效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一根矢量的波浪<svg viewBox="0 0&nb...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作