水球动态效果,要怎么用JS canvas实现
导读:关于“水球动态效果,要怎么用JS canvas实现”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“水球动态效果,要怎...
关于“水球动态效果,要怎么用JS canvas实现”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“水球动态效果,要怎么用JS canvas实现”吧。本文实例为大家分享了canvas实现水球加载动画的具体代码,供大家参考,具体内容如下
效果展示:
源码展示:
!doctype html>
html>
head>
meta charset="utf-8">
title>
canvas实现水球加载动画/title>
style>
body {
display:flex;
flex-flow:column wrap;
justify-content:center;
align-items:center;
}
#c {
margin-top:20px;
}
input[type=range]::before {
content:attr(min);
color:#000;
padding-right:5px;
}
input[type=range]::after {
content:attr(max);
color:#000;
padding-left:5px;
}
/style>
/head>
body>
canvas id="c">
当前浏览器不支持canvas 请升级!/canvas>
input type="range" name="range" min="0" max="100" step="1">
script>
canvas = document.getelementbyid("c");
ctx = canvas.getcontext("2d");
orange = document.getelementsbyname("range")[0];
m = math;
sin = m.sin;
cos = m.cos;
sqrt = m.sqrt;
pow = m.pow;
pi = m.pi;
round = m.round;
ow = canvas.width = 300;
oh = canvas.height = 300;
// 线宽
linewidth = 2
// 大半径
r = (ow / 2);
cr = r - 8 * linewidth;
ctx.beginpath();
ctx.linewidth = linewidth;
// 水波动画初始参数
axislength = 2 * r - 16 * linewidth;
// sin 图形长度
unit = axislength / 8;
// 波浪宽
range = .2 // 浪幅
nowrange = range;
xoffset = 8 * linewidth;
// x 轴偏移量
data = ~~(orange.value) / 100;
// 数据量
sp = 0;
// 周期偏移量
nowdata = 0;
waveupsp = 0.002;
// 水波上涨速度
// 圆动画初始参数
arcstack = [];
// 圆栈
br = r - 8 * linewidth;
soffset = -(pi / 2);
// 圆动画起始位置
circlelock = true;
// 起始动画锁
// 获取圆动画轨迹点集
for (var i = soffset;
i soffset + 2 * pi;
i += 1 / (8 * pi)) {
arcstack.push([
r + br * cos(i),
r + br * sin(i)
])
}
cstartpoint = arcstack.shift();
// 圆起始点
ctx.strokestyle = "#1c86d1";
ctx.moveto(cstartpoint[0], cstartpoint[1])
render();
// 开始渲染
function drawsine() {
ctx.beginpath();
ctx.save();
var stack = [];
// 记录起始点和终点坐标
for (var i = xoffset;
i = xoffset + axislength;
i += 20 / axislength) {
var x = sp + (xoffset + i) / unit;
var y = sin(x) * nowrange;
var dx = i;
var dy = 2 * cr * (1 - nowdata) + (r - cr) - (unit * y);
ctx.lineto(dx, dy);
stack.push([dx, dy])
}
// 获取初始点和结束点
var startp = stack[0]
var endp = stack[stack.length - 1]
ctx.lineto(xoffset + axislength, ow);
ctx.lineto(xoffset, ow);
ctx.lineto(startp[0], startp[1])
ctx.fillstyle = "#1c86d1";
ctx.fill()
ctx.restore();
}
function drawtext() {
ctx.globalcompositeoperation = 'source-over';
var size = 0.4 * cr;
ctx.font = 'bold ' + size + 'px microsoft yahei';
txt = (nowdata.tofixed(2) * 100).tofixed(0) + '%';
var fonty = r + size / 2;
var fontx = r - size * 0.8;
ctx.fillstyle = "rgba(06, 85, 128, 0.8)";
ctx.filltext(txt, fontx, fonty)
}
function render() {
ctx.clearrect(0, 0, ow, oh);
if (circlelock) {
if (arcstack.length) {
var temp = arcstack.shift();
ctx.lineto(temp[0], temp[1])
ctx.stroke();
}
else {
circlelock = false;
ctx.lineto(cstartpoint[0], cstartpoint[1])
ctx.stroke();
arcstack = null;
ctx.globalcompositeoperation = 'destination-over';
ctx.beginpath();
ctx.linewidth = linewidth;
ctx.arc(r, r, br, 0, 2 * pi, 1);
ctx.beginpath();
ctx.save();
ctx.arc(r, r, r - 16 * linewidth, 0, 2 * pi, 1);
ctx.restore()
ctx.clip();
ctx.fillstyle = "#1c86d1";
// 初始拖拽控件
orange.addeventlistener("change", function() {
data = ~~(orange.value) / 100;
console.log("data=" + data)
}
, 0);
}
}
else {
// 开始水波动画
// 控制波幅
if (data >
= 0.85) {
if (nowrange >
range / 4) {
var t = range * 0.01;
nowrange -= t;
}
}
else if (data = 0.1) {
if (nowrange range * 1.5) {
var t = range * 0.01;
nowrange += t;
}
}
else {
if (nowrange = range) {
var t = range * 0.01;
nowrange += t;
}
if (nowrange >
= range) {
var t = range * 0.01;
nowrange -= t;
}
}
if ((data - nowdata) >
0) {
nowdata += waveupsp;
}
if ((data - nowdata) 0) {
nowdata -= waveupsp
}
sp += 0.07;
drawsine();
drawtext();
}
requestanimationframe(render)
}
/script>
hr>
pre style="color:red">
感: 最近贡献一下我在教学中的小案例 希望能给你一些帮助 ,希望大家继续关注我的博客
--王
/pre>
/body>
/html>
以上就是关于水球动态效果,要怎么用JS canvas实现的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 水球动态效果,要怎么用JS canvas实现
本文地址: https://pptw.com/jishu/654309.html
