css系列:音频播放效果-波纹律动

news2024/9/22 11:31:35

介绍

语音播放的律动效果,通俗来说就是一个带动画的特殊样式的进度条,播放的部分带有上下律动的动画,未播放的部分是普通的灰色竖状条。

实现中夹带了less变量、继承和循环遍历,可以顺带学习一下。

结果展示

大致效果如图所示,样式需要改下,动画效果bar中的上边距调整下即可。

代码

<template>
  <div class="ripple-container">
    <div class="blue-ripple">
      <template v-for="(item, index) in rippleList">
        <!-- if判断是判断当前进度来展示播放还是未播放 -->
        <div v-if="index >= Math.floor(rate * rippleList.length)" :key="index" :style="{ height: item + '%' }"></div>
        <span v-else :key="index"></span>
      </template>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    // 当前进度,传入0.4这种数字,进度需要从0逐渐增长,直接传入一个比较大的进度只会出现空白一段的现象
    rate: {
      type: Number,
      default: 0.4,
    },
  },
  data() {
    return {
      rippleList: [
        40, 20, 40, 50, 70, 50, 20, 40, 30, 20, 30, 50, 100, 60, 20, 40, 30, 20, 30, 40, 70, 40, 20, 40, 40, 50, 70, 50,
        20, 40, 30, 20, 30, 50, 100, 60, 20,
      ],
    };
  },
};
</script>

<style lang="less" scoped>
.ripple-container {
  .blue-ripple {
    width: 100%;
    height: 48px;
    display: flex;
    // 纵向居中
    align-items: center;
    // less变量,主题色
    @color: #3370ff;
    // 给span标签增加样式,不设置高度是因为高度在动画中
    // span标签用于展示波纹律动效果
    span {
      width: 3px;
      border-radius: 18px;
      margin-right: 4px;
    }
    // div继承span标签的样式,用来统一波纹条样式
    // div标签用于展示非正在播放的部分
    div {
      // less继承需要将所有层级的类名都写上
      &:extend(.ripple-container .blue-ripple span);
      background: rgba(0, 0, 0, 0.16);
    }
    @keyframes bar {
        0% {
          background: @color;
          margin-top: 5%;
          height: 10%;
        }
        50% {
          background: @color;
          margin-top: 0;
          height: 100%;
        }
        100% {
          background: @color;
          margin-top: 5%;
          height: 10%;
        }
      }
    // less循环遍历生成span的样式
    // 这里使用的是less的when语法,当@i小于等于@n时执行
    .generate-span(@n,@i:1) when(@i <= @n) {
      span:nth-child(@{i}) {
        // 这个本来是想配合.generate-keyframes使用的,但是less似乎不支持遍历生成@keyframes的名字
        // @name: ` "bar@{i}" `;
        animation: bar 2s 0.2s * @i infinite linear;
      }
      // 递归调用,生成下一个span的样式,这里when是判断是否结束的,这个递归调用用来形成遍历
      .generate-span(@n, @i + 1);
    }
    // 循环遍历生成keyframes,生成有问题
    .generate-keyframes(@n,@i:1) when(@i <= @n) {
      // 用less变量来解决不能直接使用@i问题
      @keyfaramesName: ` "bar@{i}" `;
      // 似乎不支持动态生成keyframes的名称
      @keyframes @keyfaramesName {
        0% {
          background: @color;
          margin-top: 5%;
          height: 10;
        }
        50% {
          background: @color;
          margin-top: 0;
          height: 100;
        }
        100% {
          background: @color;
          margin-top: 5%;
          height: 10;
        }
      }
      .generate-keyframes(@n, @i + 1);
    }
    // 调用循环遍历
    .generate-span(100);
    // .generate-keyframes(100);
  }
}
</style>

结语

整体效果还可以,动态生成keyframes名称似乎不支持,如有大神了解,烦请指教。

对文章有好的建议,欢迎提出。讲解不细之处,欢迎指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在调用接口上map与forEach的区别

在场景&#xff1a;一个表格数据需要上传&#xff0c;每行表格需要上传图片->这就需要在提交时对数据也就是数组进行处理&#xff08;先将每个元素图片上传拿到图片id 这种情况我刚开始就用的map处理&#xff0c;然后问题来了&#xff0c;提交的接口调用了&#xff0c;但是…

linux搭建harbor镜像仓库

安装docker-compose&#xff1a;安装docker-compose_安装 docker-compose-CSDN博客 安装harbor&#xff0c;我安装的是v2.4.3 #下载安装包 wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz#解压 tar -zxvf harbor-off…

【Python】selenium的异常类selenium.common.exceptions的汇总

我们在使用selenium爬虫的过程中&#xff0c;可能会遇到各种报错&#xff0c;例如&#xff1a; 这些报错是selenium.common.exceptions 是 Selenium WebDriver 库中的一个模块&#xff0c;它包含了 WebDriver 操作中可能遇到的各种异常类。这些异常类帮助开发者在自动化测试过…

Nodejs 第七十七章(MQ高级)

MQ介绍和基本使用在75章介绍过了&#xff0c;不再重复 MQ高级用法-延时消息 什么是延时消息? Producer 将消息发送到 MQ 服务端&#xff0c;但并不期望这条消息立马投递&#xff0c;而是延迟一定时间后才投递到 Consumer 进行消费&#xff0c;该消息即延时消息 插件安装 R…

el-tree回显复选框时半选中和全选中的树

项目需求如下&#xff1a;当我点击“编辑”后&#xff0c;需要在tree树上全勾中和半勾中选项&#xff0c;由于后端接口返回的tree树是含了父级节点id的数组集合&#xff0c;所以我们回显时需要处理好这个全勾中和半勾中的问题。 主要思路如下&#xff0c;我们通过setData方法获…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障&#xff1a; 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃&#xff0c;由于数据涉密&#xff0c;需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测&#xff0c;经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

【深度学习】数竹签演示软件系统

往期文章列表&#xff1a; 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整…

meilisearch的Managing API keys,自己趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

电商比价系统的搭建需要哪些方面着手准备?

搭建一个淘宝/京东比价系统所需的时间取决于多个因素&#xff0c;包括但不限于系统的复杂度、开发团队的规模与经验、数据源获取的难易程度、技术选型等。以下是一个大致的时间估计和考虑因素&#xff1a; 需求分析与设计&#xff1a; 确定系统的主要功能&#xff0c;如商品搜…

Python基于 GPU 的机器学习算法库之cuml使用详解

概要 在大数据和机器学习的时代,高效的数据处理和模型训练变得尤为重要。传统的 CPU 计算方式在处理大规模数据时往往显得力不从心,而 GPU 的并行计算能力为此提供了一种解决方案。cuml 是 RAPIDS AI 项目的一部分,它提供了一组基于 GPU 的机器学习算法,能够极大地提升数据…

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树&#xff08;最优二叉树&#xff09;定义举个&#x1f330;&#xff08;WPL的计算&#xff09; 哈夫曼树的构造&#xff08;最优二叉树的构造&#xff09;举个&#x1f330; 哈夫曼编码定义构造 哈夫曼树&#xff08;最优二叉树&#xff09; 在介绍哈夫曼树之…

中间件复习之-分布式存储系统

单机存储系统介绍 存储引擎&#xff1a;存储系统的发动机&#xff0c;提供数据的增、删、改、查能力&#xff0c;直接决定存储系统的功能&#xff08;支持怎么样的查询&#xff0c;锁能锁到什么程度&#xff09;和性能&#xff08;增删改查速度&#xff09;。 性能因素 写入方…

1939springboot VUE 高等院校求职信息管理系统开发mysql数据库web结构java编程计算机网页源码maven项目前后端分离

一、源码特点 springboot VUE高等院校信息&#xff08;求职&#xff09;管理系统是一套完善的完整信息管理类型系统 前后端分离&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解vue java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&a…

Spring Cloud全家桶(上)【Nacos、OpenFeign、LoadBalancer、GateWay、金丝雀灰色发布】

0.零基础入门微服务实战课 1.微服务和 Spring Cloud1.1 什么是微服务&#xff1f;1.2 什么是 Spring Cloud&#xff1f;1.3 微服务 VS Spring Cloud 2.为什么要学微服务&#xff1f;3.Spring Cloud 组件介绍1.什么是 Nacos?1.1 Nacos 功能1.1.1 配置中心1.1.2 注册中心 1.2 Na…

29、shell变量、重定向及运算符

一、shell脚本 1.1、shell的定义 脚本&#xff1a;可运行的代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;。 脚本的特点&#xff1a;从上到下&#xff0c;按行执行。 python&#xff1a;脚本语言 格式更严谨的执行缩进。也是从上到下按行执行。 shel…

正式发布 | 极海首款GHD3440电机专用栅极驱动器,构建多元电机产品矩阵

​栅极驱动器是低压控制器和高功电路之间的缓冲电路&#xff0c;用于放大控制器的控制信号&#xff0c;从而实现功率器件更有效的导通和关断。随着各种智能电子设备的不断普及和应用&#xff0c;栅极驱动器的市场需求也在不断增加。据国际权威研究机构Yole Group预计&#xff0…

元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发

在当今互联网飞速发展的时代&#xff0c;元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品&#xff0c;更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式&#xff0c;将游戏体验和商业模式完美结合&#xff0c;开…

HoloLens2系列讲解 - 05 HoloLens2 Appx 安装

安装准备 Hololens2设备打包好的Appx文件一台电脑Hololens2 和电脑需要处于同一局域网 安装Appx 1.在Hololens设备上点击设置->网络和Internet->选择“自己wifi名称”网络并点击自动连接。 2.查看HoloLens的IP地址&#xff0c;如192.168.0.1。 &#xff08;1&#xff…

【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写

通过组合实现类的继承和方法重写 要实现面向对象的编程&#xff0c;就必须实现面向对象编程的三大特性&#xff1a;封装、继承和多态。 1 封装 类的定义及其内部数据的定义可以看作是类的属性&#xff0c;基于类定义的函数方法则是类的成员方法。 2 继承 Go 语言中&#x…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称&#xff0c;微软正计划将其人工智能&#xff08;AI&#xff09;工具和软件的开发工作外包给OpenAI&#xff0c;这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示&#xff0c;微…