里程表的实现
Git
HTML版本
- 首先需要了解一些基础知识
- canvas 使用arc()在canvas中圆画弧
- context.arc(x, y, radius, startAngle, endAngle [, anticlockwise])
- x 圆弧对应的圆心横坐标
- y 圆弧对应的圆心纵坐标
- radius 圆弧的半径大小。
- startAngle 圆弧开始的角度,单位是弧度。
- endAngle 圆弧结束的角度,单位是弧度。
- anticlockwise如果设置为true,则表示按照逆时针方向从startAngle绘制到endAngle。
<!DOCTYPE html>
<html>
<head>
<title>Canvas Mileage demo</title>
</head>
<body>
<div class="mileage">
<canvas id="myCanvas" width="200" height="200"></canvas>
<div class="mileageNumber" >
<div id="mileageNumber"></div>
<div>km/h</div>
</div>
</div>
<script type="text/javascript">
let c=document.getElementById("myCanvas");
let ctx=c.getContext("2d");
let pr = 0
function fw(pro){
const lineWidth = 15
const pre = pro * 0.61
ctx.clearRect(0,0,200, 200)
for(let i=0;i<=90;i++){
if(i <= 60){
ctx.beginPath();
ctx.lineWidth = lineWidth;
let lab = 1
let color = i < pre ? "#14e524" : "#cccccc";
ctx.strokeStyle = color;
let num = i*4
let st = 1.18*Math.PI
ctx.arc(100,100,80,(lab*num)*(Math.PI/180) - st,(lab*(num+1))*(Math.PI/180) - st);
ctx.stroke();
ctx.closePath();
}
}
}
let timer = setInterval(() => {
pr < 80 ? pr++ : clearInterval(timer)
document.getElementById('mileageNumber').innerHTML = pr
fw(pr)
}, 20);
</script>
<style>
.mileage{
position: relative;
width: 300px;
height: 300px;
}
canvas{
position: absolute;
margin: 0 auto;
}
.mileageNumber{
position: absolute;
text-align: center;
font-size: 24px;
width: 200px;
margin-top: 60px;
}
</style>
</body>
</html>