canvas百分百特效
这个特效是别的人,非原创。原创地址
http://blog.csdn.net/lecepin/article/details/53536445

背后的水是可以动的
代码我再研究了下,下面是加了注释的代码。不是原创好像没什么好说的了。。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态进度加载小球</title>
<style>
#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;
}
</style>
</head>
<body>
<canvas id="c"></canvas>
<input type="range" id="r" min="0" max="100" step="1">
<script>
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*振幅宽 + 振幅偏移量)”
//y=sin(TX+x)
var y = -Math.sin((sX + x) * waveWidth + xOffset);
//dY是波浪的高度,-是因为水从下往上
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.clip(),去掉圆外面的水
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);
//通过不断刷新来获取range的值
rangeValue = range.value;
if(IsdrawCircled == false){
drawCircle();
}
//如果拖动input,就安每次加减1的速度增减
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>
</body>
</html>
canvas百分百特效的更多相关文章
- 纯JavaScript实现HTML5 Canvas六种特效滤镜
纯JavaScript实现HTML5 Canvas六种特效滤镜 小试牛刀,实现了六款简单常见HTML5 Canvas特效滤镜,并且封装成一个纯 JavaScript可调用的API文件gloomyfi ...
- 16个富有创意的HTML5 Canvas动画特效集合
HTML5技术正在不断的发展和更新,越来越多的开发者也正在加入HTML5阵营,甚至在移动开发上HTML5的地位也是越来越重要了.HTML5中的大部分动画都是通过Canvas实现,因为Canvas就像一 ...
- 分享8款令人惊叹的HTML5 Canvas动画特效
HTML5的确可以制作出非常绚丽的网页动画效果,尤其是利用HTML5 Canvas特性和HTML5 3D特性,我们更加可以欣赏到超酷的动画特效.今天我从html5tricks网站上整理了8款令人惊叹的 ...
- 16个非常有趣的HTML5 Canvas动画特效集合
HTML5技术正在不断的发展和更新,越来越多的开发者也正在加入HTML5阵营,甚至在移动开发上HTML5的地位也是越来越重要了.HTML5中的大部分动画都是通过Canvas实现,因为Canvas就像一 ...
- 几十行js实现很炫的canvas交互特效
几十行js实现很炫的canvas交互特效 废话不多说,先上效果图! 本篇文章的示例代码都是抄的一个叫Franks的老外在yutube上的一个教学视频,他还出了很多关于canvas的视频,十分值得学习, ...
- html5 canvas 粒子特效
不知不觉就已经好久没写过博客了,自从七月正式毕业后,离开了实习了将近九个月的老东家,进了鼠厂后,做的事都是比较传统的前端活,之前在tpy的时候只管做移动h5的特效以及小游戏,再加上实习所以时间比较充裕 ...
- canvas焰火特效
之前在抖音上看到了一个很漂亮的焰火效果.这会儿有时间就用canvas实现了一下. 演示地址:http://suohb.com/work/firework4.htm 先看效果:(静态图片看不太出效果,请 ...
- canvas雪花特效-jQuery插件实现
这是一款效果十分逼真的html5 canvas下雪场景动画特效插件.这款下雪特效是基于Jason Brown的Snowfall jquery plugin的基础上制作的.在Snowfall jquer ...
- canvas入门级基本用法实现雨滴下落特效
canvas基础知识点参考各种文档,直接上代码,有非常详细注释 <!DOCTYPE html> <html> <head> <meta charset=&qu ...
随机推荐
- HDU - 4333 Revolving Digits(扩展KMP)
http://acm.hdu.edu.cn/showproblem.php?pid=4333 题意 一个数字,依次将第一位放到最后一位,问小于本身的数的个数及等于本身的个数和大于本身的个数,但是要注意 ...
- jQuery 选择城市,显示对应的即时时区时间
因客户需要,我们CRM系统中,jQuery 弄个时区插件 如图: HTML: <div id="cityDate"> <i class="P_arrow ...
- 拿webshell权限方法(一)
概念 Webshell就是以asp,php,jsp或cgi等网页文件形式存在的一种命令执行环境,也可以将其称为一种网页后门. Access数据库拿webshell 首先看是否能找到网站漏洞进行网站的后 ...
- JS——页面倒计时跳转
Js几秒后倒计时跳转 <html><head><title>出错啦~~~</title><link href="css/login1.c ...
- C# 一般处理程序下载文件
using System; using System.Collections; using System.Data; using System.Linq; using System.Web; usin ...
- TCP传输协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,四次挥手断开连接. 三次握手 是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接建立成功.在so ...
- printf 函数的实现原理
/* * ===================================================================================== * * Filen ...
- k8s系列~docker mysql
docker封装mysql的一些心得 简介:今天咱们来聊聊容器化mysql的一些心得 版本:Docker version 18.03 mysql 5.7.21考虑条件: 1 选好合适的docker镜 ...
- Django学习手册 - cookie / session
cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...
- python - class类 (七) 三大特性 - 封装 结尾
封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...