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


    介绍

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

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

    结果展示

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

    代码

    1. <script>
    2. export default {
    3. props: {
    4. // 当前进度,传入0.4这种数字,进度需要从0逐渐增长,直接传入一个比较大的进度只会出现空白一段的现象
    5. rate: {
    6. type: Number,
    7. default: 0.4,
    8. },
    9. },
    10. data() {
    11. return {
    12. rippleList: [
    13. 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,
    14. 20, 40, 30, 20, 30, 50, 100, 60, 20,
    15. ],
    16. };
    17. },
    18. };
    19. script>
    20. <style lang="less" scoped>
    21. .ripple-container {
    22. .blue-ripple {
    23. width: 100%;
    24. height: 48px;
    25. display: flex;
    26. // 纵向居中
    27. align-items: center;
    28. // less变量,主题色
    29. @color: #3370ff;
    30. // 给span标签增加样式,不设置高度是因为高度在动画中
    31. // span标签用于展示波纹律动效果
    32. span {
    33. width: 3px;
    34. border-radius: 18px;
    35. margin-right: 4px;
    36. }
    37. // div继承span标签的样式,用来统一波纹条样式
    38. // div标签用于展示非正在播放的部分
    39. div {
    40. // less继承需要将所有层级的类名都写上
    41. &:extend(.ripple-container .blue-ripple span);
    42. background: rgba(0, 0, 0, 0.16);
    43. }
    44. @keyframes bar {
    45. 0% {
    46. background: @color;
    47. margin-top: 5%;
    48. height: 10%;
    49. }
    50. 50% {
    51. background: @color;
    52. margin-top: 0;
    53. height: 100%;
    54. }
    55. 100% {
    56. background: @color;
    57. margin-top: 5%;
    58. height: 10%;
    59. }
    60. }
    61. // less循环遍历生成span的样式
    62. // 这里使用的是less的when语法,当@i小于等于@n时执行
    63. .generate-span(@n,@i:1) when(@i <= @n) {
    64. span:nth-child(@{i}) {
    65. // 这个本来是想配合.generate-keyframes使用的,但是less似乎不支持遍历生成@keyframes的名字
    66. // @name: ` "bar@{i}" `;
    67. animation: bar 2s 0.2s * @i infinite linear;
    68. }
    69. // 递归调用,生成下一个span的样式,这里when是判断是否结束的,这个递归调用用来形成遍历
    70. .generate-span(@n, @i + 1);
    71. }
    72. // 循环遍历生成keyframes,生成有问题
    73. .generate-keyframes(@n,@i:1) when(@i <= @n) {
    74. // 用less变量来解决不能直接使用@i问题
    75. @keyfaramesName: ` "bar@{i}" `;
    76. // 似乎不支持动态生成keyframes的名称
    77. @keyframes @keyfaramesName {
    78. 0% {
    79. background: @color;
    80. margin-top: 5%;
    81. height: 10;
    82. }
    83. 50% {
    84. background: @color;
    85. margin-top: 0;
    86. height: 100;
    87. }
    88. 100% {
    89. background: @color;
    90. margin-top: 5%;
    91. height: 10;
    92. }
    93. }
    94. .generate-keyframes(@n, @i + 1);
    95. }
    96. // 调用循环遍历
    97. .generate-span(100);
    98. // .generate-keyframes(100);
    99. }
    100. }
    101. style>

    结语

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

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

  • 相关阅读:
    设计模式:适配器模式
    简述SVM
    JSP中如何正确的填写include指令中的file路径呢?
    mysql图片存取初探
    连接数据库报错2003-Can‘t connect to MySQL server on ‘localhost‘(10061)
    stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)
    Win:使用 netsh 命令配置 Port Forwarding
    Unity UGUI的Mask(遮罩)组件的介绍及使用
    【Linux】常见指令(一)
    Spring框架的原理及应用详解(二)
  • 原文地址:https://blog.csdn.net/zkx529/article/details/139605612