HTML+CSS+JS实现 ❤️canvas圆形水波进度条动画特效❤️

news/2024/11/23 3:03:50/

  🍅 作者主页:Java李杨勇 

🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌  简历模板、学习资料、面试题库、技术互助【关注我,都给你】

🍅 欢迎点赞 👍 收藏 ⭐留言 📝   

效果演示: 文末获取源码 

主要代码实现:

CSS样式:

 #c {margin: 0 auto;display: block;}#r {display: block;margin: 0 auto;}#r::before {color: black;content: attr(min);padding-right: 10px;}#r::after {color: black;content: attr(max);padding-left: 10px;}

JavaScript代码 :

<script type="text/javascript">var canvas = document.getElementById('c');var ctx = canvas.getContext('2d');var range = document.getElementById('r');//range控件信息var rangeValue = range.value;var nowRange = 0; //用于做一个临时的range//画布属性var mW = canvas.width = 250;var mH = canvas.height = 250;var lineWidth = 2;//圆属性var r = mH / 2; //圆心var cR = r - 16 * lineWidth; //圆半径//Sin 曲线属性var sX = 0;var sY = mH / 2;var axisLength = mW; //轴长var waveWidth = 0.015; //波浪宽度,数越小越宽 var waveHeight = 6; //波浪高度,数越大越高var speed = 0.09; //波浪速度,数越大速度越快var xOffset = 0; //波浪x偏移量ctx.lineWidth = lineWidth;//画圈函数var IsdrawCircled = false;var drawCircle = function() {ctx.beginPath();ctx.strokeStyle = '#1080d0';ctx.arc(r, r, cR + 5, 0, 2 * Math.PI);ctx.stroke();ctx.beginPath();ctx.arc(r, r, cR, 0, 2 * Math.PI);ctx.clip();}//画sin 曲线函数var drawSin = function(xOffset) {ctx.save();var points = []; //用于存放绘制Sin曲线的点ctx.beginPath();//在整个轴长上取点for (var x = sX; x < sX + axisLength; x += 20 / axisLength) {//此处坐标(x,y)的取点,依靠公式 “振幅高*sin(x*振幅宽 + 振幅偏移量)”var y = -Math.sin((sX + x) * waveWidth + xOffset);var dY = mH * (1 - nowRange / 100);points.push([x, dY + y * waveHeight]);ctx.lineTo(x, dY + y * waveHeight);}//封闭路径ctx.lineTo(axisLength, mH);ctx.lineTo(sX, mH);ctx.lineTo(points[0][0], points[0][1]);ctx.fillStyle = '#1c86d1';ctx.fill();ctx.restore();};//写百分比文本函数var drawText = function() {ctx.save();var size = 0.4 * cR;ctx.font = size + 'px Microsoft Yahei';ctx.textAlign = 'center';ctx.fillStyle = "rgba(06, 85, 128, 0.8)";ctx.fillText(~~nowRange + '%', r, r + size / 2);ctx.restore();};var render = function() {ctx.clearRect(0, 0, mW, mH);rangeValue = range.value;if (IsdrawCircled == false) {drawCircle();}if (nowRange <= rangeValue) {var tmp = 1;nowRange += tmp;}if (nowRange > rangeValue) {var tmp = 1;nowRange -= tmp;}drawSin(xOffset);drawText();xOffset += speed;requestAnimationFrame(render);}render();</script>

源码获取

大家可以点赞、收藏、关注、评论我啦 、查看博主主页或下方微信公众号获取~!

打卡 文章 更新 45  /  100天

精彩推荐更新中:

HTML5大作业实战案例《100套》

Java毕设项目精品实战案例《100套》


http://www.ppmy.cn/news/877883.html

相关文章

一个精美的跳动小球—手把手教你用贝塞尔曲线实现一个酷炫跳动动画。

一个精美的跳动小球—手把手教你用贝塞尔曲线实现一个酷炫跳动动画。 2017-08-07 BraveJoy 终端研发部 前言介绍 手把手教你用贝塞尔曲线实现一个精美的跳动的小球。 正文 效果展示&#xff1a; 说点题外话 一开始呢&#xff0c;我就想实现一个这样的效果&#xff0c;于是就…

animate-动画

animate改变样式的动画 <!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>动画</title> <link rel"stylesheet" type"text/css" hr…

仿迅雷下载进度条

效果如下&#xff1a; package com.apple.myview.widget;/** * 模仿迅雷下载的效果*/public class Progress4 extends View {private int width;private int height;private Paint mPaintBackGround;private Paint mPaintWave;private Paint mPaintText;private float textSize…

android 关闭关机动画,Android 开关机动画 BootAnimation/ShutdownAnimation 解析

引言 (该部分转载): 开机动画的地址:system\media\bootanimation.zip,要修改开机动画就是修改bootanimation这个文件。如果说你的手机里没有这个文件,那就是说明你用的是官方原始版本的rom,开机动画没有被修改过,但这不碍事,没有就放一个进去,到时候想换回最原始的开机画…

android 开机动画,修改安卓开机动画(除了部分系统 如MIUI等)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这技术已经很久了&#xff0c;但还是忍不住搬运了一下。 出处是百度的&#xff0c;很久很久以前玩手机在百度上学的 我这里说的开机动画是指开机的第二屏 开机动画可以在下载的rom里修改&#xff0c;也可以刷机后修改(推荐后者&am…

Animate.css+wow.js实现页面滚动到可视区显示动画效果

今天看迅雷官网 https://www.xunlei.com/v2018/dist/aboutus.html 实现的滚动到可视区域后显示动画&#xff0c;自己之前没做过这种&#xff0c;非常感兴趣&#xff0c;然后问小伙伴&#xff0c; 大部分都没做过类似的&#xff0c;于是乎我只能自己查了 第一想到的是swiper&am…

开机动画适配方案_修改开机动画教程

bootanimation大抵是开机动画。 开机动画的地址&#xff1a;system\media\bootanimation.zip要修改&#xff0c;开机动画就是修改bootanimation这个文件 替换 framework-res.apk时先放到system文件夹下修改权限为31 如果说你的手机里没有这个文件&#xff0c;那就是说明你用的是…

android 开关机动画

开机画面&#xff0c;按照国际惯例&#xff0c;一般是分为2屏&#xff0c;当然也有3屏的说法&#xff0c;不管怎样&#xff0c;我这里说得就是最后的一屏&#xff0c;按照bootanimation的字面意思翻译&#xff0c;大概也就是开机动画的意思&#xff0c;那这就不说第几屏了&…