首页 > 其他分享 >神奇的进度条!水缸进度动画效果怎么实现的?

神奇的进度条!水缸进度动画效果怎么实现的?

时间:2024-08-02 16:28:33浏览次数:17  
标签:动画 百分比 水缸 进度条 percent wave 200px 水波 图片

最近看到一个非常有趣的动画效果:水波进度动画,想了一下实现思路,分享给大家~

效果如下

图片

图片

图片

图片

基本组件代码

先把最基础的组件代码样式写出来,其实无非就是四个部分:

1、圆形水缸

2、水波

2、百分比数字

3、进度条

我们先把圆形水缸、百分比数字、进度条画出来,水波待会再画

图片

图片

可以看到初步效果已经出来了!

图片

图片

水波效果

最重点的就是水波,其实这个水波就是个障眼法罢了,我画张图你们就懂了,其实就是一个圆角正方形,一直在旋转和上升下降,让用户有一种水波的视觉感~

图片

图片

所以我们可以画一个圆角正方形,并且让他一直旋转即可

图片

图片

图片

图片

并且我们要让这个水波效果,随着百分比的增加而上升,随着百分比的减少而下降,所以得监听百分比

图片

图片

图片

图片

现在可以发现已经有水波效果了!

图片

图片

但是感觉水溢出来了,所以需要给水缸设置一下溢出隐藏!

图片

图片

最终实现效果:

图片

完整代码

<template>
  <div class="wave-container">
    <!-- 水缸 -->
    <div class="main">
      <!-- 百分比数字 -->
      <div class="main-number">{{ percent }}</div>
      <!-- 水波效果 -->
      <div ref="wave" class="wave"></div>
    </div>
    <!-- 进度条 -->
    <Slider v-model:value="percent" class="percent-bar" :tipFormatter="null" />
  </div>
</template>

<script setup lang="ts">
import { ref, watch } from 'vue';
import { Slider } from 'ant-design-vue';

const percent = ref(0);

const wave = ref<HTMLDivElement | null>(null);

// 监听百分比,计算 top
watch(
  percent,
  v => {
    const waveEle = wave.value;
    if (waveEle) {
      waveEle.style.top = `${200 * (1 - v / 100)}px`;
    }
  },
  {
    immediate: true,
  },
);
</script>

<style scoped lang="less">
.wave-container {
  display: flex;
  flex-direction: column;
  align-items: center;

  .main {
    position: relative;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    background: #fff;
    border: #fff solid 5px;
    display: flex;
    justify-content: center;
    align-items: center;
    // 增加样式隐藏溢出
    overflow: hidden;

    .main-number {
      font-size: 100px;
      z-index: 1;
      user-select: none;
    }
  }

  @keyframes rotateAnimation {
    from {
      transform: rotate(0deg);
    }
    to {
      transform: rotate(360deg);
    }
  }

  .wave {
    position: absolute;
    top: 200px;
    width: 400px;
    height: 400px;
    background: rgb(168, 168, 231);
    border-radius: 40%;
    animation: rotateAnimation 2s linear infinite;
  }

  .percent-bar {
    width: 200px;
    background: #fff;
  }
}
</style>

标签:动画,百分比,水缸,进度条,percent,wave,200px,水波,图片
From: https://blog.csdn.net/leyang0910/article/details/140743049

相关文章

  • Animate基本概念:补间动画
    补间动画是Animate软件中比较重要的组成部分。举例来说,假设第1帧和第20帧是属性关键帧,可以将舞台左侧的一个元件放在第1帧中,然后将其移至舞台右侧的第20帧中。在创建补间时,Animate将计算影片剪辑在此中间的所有位置。结果将得到从左到右(即从第1帧移至第20帧)的元......
  • el-progress 自定义线状进度条右边的文字
    需要展示类似下面的效果 搜了很多slot的方式试了都不行,好像是因为我后面的文字太长了导致了换行,加上这边需要加其他的样式,最后干脆将原始的文字变成空的,自己写右边的文字加样式了<divstyle="margin:10px020px0"v-f......
  • 用Python打造精彩动画与视频,3.3 添加音频和简单效果
     3.3添加音频和简单效果在本节中,我们将学习如何使用MoviePy库为视频添加音频和一些简单的效果。这些操作可以让你的视频更具吸引力和个性化。准备工作首先,确保你已经安装了MoviePy和pydub库。你可以通过以下命令安装:pipinstallmoviepypydub同时,你需要确保系统......
  • 用Python打造精彩动画与视频,3.2 基本的剪辑和合并操作
     3.2基本的剪辑和合并操作在这一节中,我们将学习如何使用MoviePy库对视频进行基本的剪辑和合并操作。MoviePy是一个用于视频编辑的Python库,可以轻松地实现视频的剪辑、合并、添加音频等操作。准备工作首先,确保你已经安装了MoviePy库。你可以通过以下命令安装:pipins......
  • css动画-卡片滚动效果
    动画效果效果如下:当卡片进行左右滚动时,每次都恰好滑动出来下一个卡片,将下一个卡片完整的展现在容器中间。核心代码1.设置容器和卡片的样式.wrapper{display:flex;gap:20px;width:300px;margin:100pxauto;overflow-x:scroll;}......
  • 前端——jQuery中的事件与动画
    jQuery事件事件组成在jQuery中,一个事件由事件主体、事件类型、事件处理函数三个部分组成。//实现事件$("#button").click(function(){//...})//调用事件$("#button").click();鼠标事件常用的鼠标事件方法方法                  ......
  • 沙雕动画制作技术与创意表达研究
    摘要:沙雕动画作为一种新兴的动画形式,以其幽默、调侃的特点受到广泛关注。本文旨在探讨沙雕动画的制作技术、创意表达及其在不同领域的应用。1.沙雕动画概述:沙雕动画是一种利用表情包式人物制作的动画,通过搞笑、幽默的表现形式传达轻松愉快的情绪。2.沙雕动画的应用领域:......
  • 微信小程序开发中的动画效果和页面过渡
    微信小程序的动画效果和页面过渡可以通过使用wx.createAnimation()方法来实现。wx.createAnimation()可以创建一个Animation对象,然后我们可以通过该对象调用不同的方法来控制动画的效果和过渡。下面我将详细介绍动画效果和页面过渡的常用方法和案例代码。在开始之前,请确保已经......
  • 利用DYNAMIXEL智能伺服舵机从《传送门2》中打造一个更优质的动画机器人小麦克利(Wheatl
    原文链接:https://www.youtube.com/watch?v=OEn9hZ-Tw1E   这段视频由ROBOTIS提供!大家好,我想给大家推荐一个精彩视频,在视频中展示了如何制作《传送门2》中的动画机器人小麦克利(Wheatley)。看看是如何利用DYNAMIXEL智能伺服系统让小麦克利活起来的。  对于那些可能想设......
  • unity2D游戏开发16弹弓动画
    清理动画器选中PlayerObject,打开Animator,删除原来的四个状态右键选择CreateState|fromNewBlendTree;冲命名为WalkTree双击WalkTree查看BlendTreeGraph设置属性为2DSimpleDirectional,再点击加号选择AddMotionField添加四个,如图点击BaseLayer......