canves 实现波浪百分比控制
- 业务需要绘制一个可控制的百分比波浪
- 于是简单封装一下,入参和相关调用
var ele =wavesurRecord({
element,
percentage = 0,
waveWidth= 0.008,
speed = 0.02,
xofspeed = 0,
strokeStyle="#007c29",
fillStyle="#007c29",
})
ele.getCanves()
ele.setSpeed()
ele.setPercentage()
主函数代码
function wavesurRecord({
element,
percentage = 0,
waveWidth= 0.008,
speed = 0.02,
xofspeed = 0,
strokeStyle="#007c29",
fillStyle="#007c29",
}) {
console.log(element,typeof element);
var beisizer = typeof element === 'object' ? element : document.getElementById("progress");
var ContenofBeisizer = beisizer.getContext("2d");
var beisizerwidth = beisizer.width;
var beisizerheight = beisizer.height;
var beisizerlinewidth = 2;
var sinX = 0;
var sinY = beisizerheight / 2.0;
sinY = percentage
? beisizer.height * (1 - percentage)
: beisizer.height + 10;
var axisLenght = beisizerwidth;
var waveHeight = beisizerheight / 15.0;
var rand = beisizerheight;
ContenofBeisizer.lineWidth = beisizerlinewidth;
var drawSin = function (xofspeed) {
ContenofBeisizer.save();
var points = [];
ContenofBeisizer.beginPath();
for (var x = sinX; x < sinX + axisLenght; x += 80 / axisLenght) {
var y = -Math.sin((sinX + x) * waveWidth + xofspeed);
points.push([x, rand + y * waveHeight]);
ContenofBeisizer.lineTo(x, sinY + y * waveHeight);
}
ContenofBeisizer.lineTo(axisLenght, beisizerheight);
ContenofBeisizer.lineTo(sinX, beisizerheight);
ContenofBeisizer.lineTo(points[0][0], points[0][1]);
ContenofBeisizer.stroke();
ContenofBeisizer.restore();
ContenofBeisizer.strokeStyle =strokeStyle;
ContenofBeisizer.fillStyle = fillStyle;
ContenofBeisizer.fill();
};
var rendY = function () {
ContenofBeisizer.clearRect(0, 0, beisizerwidth, beisizerheight);
var tmp = 0.1;
rand -= tmp;
var b = beisizerheight - rand;
if (parseInt(b) == beisizerheight) {
rand = beisizerheight;
}
drawSin(xofspeed);
xofspeed += speed;
requestAnimationFrame(rendY);
};
drawSin();
rendY();
return {
getCanves:()=>ContenofBeisizer,
setSpeed:(val)=>speed=val,
setPercentage: (val) =>
val
? (sinY = beisizer.height * (1 - val))
: (sinY = beisizer.height + 10),
};
}