当前位置: 首页 > news >正文

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

介绍

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

实现中夹带了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.lryc.cn/news/377896.html

相关文章:

  • WPF学习(1)--类与类的继承
  • Spring Boot框架的原理及应用详解(六)
  • 密码学与信息安全面试题及参考答案(2万字长文)
  • C++语法19 循环嵌套结构(for/while循环)
  • AtomicInteger原理和CAS与Synchronized(juc编程)
  • 抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版
  • 【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践
  • leetcode70 爬楼梯
  • ENVI实战—一文搞定非监督分类
  • 【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
  • 具身智能特点及实现路线
  • 重温react-04
  • lock-锁的概念
  • Docker 可用镜像源
  • MySQL 搭建主从报错 1236
  • 华为OD机试真题2024版-求幸存数之和
  • Python - 各种计算器合集【附源码】
  • 【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条
  • AJAX 综合案例-day2
  • 【Esp32连接微信小程序蓝牙】附Arduino源码《 返回10007 相同特征id冲突问题》
  • 并发控制技术
  • 什么是网段
  • PHP和Mysql前后端交互效果实现
  • vue小总结
  • RapidLayout:中英文版面分析推理库
  • postman 工具下载安装使用教程_postman安装
  • 【数学建模】——【新手小白到国奖选手】——【学习路线】
  • CSS文本超限后使用省略号代替
  • 多线程下JVM内存模型 和 volatile关键字
  • Uniapp实现页面滚动Tab吸顶,点击tab内容滚动到对应tab内容位置