从网上找的环形进度条代码如下,请问该如何改动才能让次进度条可以自适应屏幕的大小,最大分辨率为4k,最小为1600,谢谢~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>canvas圆环进度</title>
<link rel="stylesheet" href="">
<style>
*{padding: 0; margin: 0; }
.circle{width: 200px;height: 200px;margin: 0 auto;position: relative;}
canvas{display: block;margin: 0;position: absolute;background: white;left: 0;top: 0;}
#canvas_1{z-index: 1 }
#canvas_2{z-index: 2; background: transparent;transform:rotate(-90deg); }
</style>
</head>
<body>
<div class="circle">
<canvas id="canvas_1" width="200" height="200"></canvas>
<canvas id="canvas_2" width="200" height="200"></canvas>
</div>
<script>
function inte(percent) {
var canvas_1 = document.querySelector('#canvas_1');
var canvas_2 = document.querySelector('#canvas_2');
var ctx_1 = canvas_1.getContext('2d');
var ctx_2 = canvas_2.getContext('2d');
ctx_1.lineWidth = 10;
ctx_1.strokeStyle = "#ccc";
//画底部的灰色圆环
ctx_1.beginPath();
ctx_1.arc(canvas_1.width / 2, canvas_1.height / 2, canvas_1.width / 2 - ctx_1.lineWidth / 2, 0, Math.PI * 2, false);
ctx_1.closePath();
ctx_1.stroke();
if (percent < 0 || percent > 100) {
throw new Error('percent must be between 0 and 100');
return
}
ctx_2.lineWidth = 10;
ctx_2.strokeStyle = "#000";
var angle = 0;
var timer;
(function draw() {
timer = requestAnimationFrame(draw);
ctx_2.clearRect(0, 0, canvas_2.width, canvas_2.height)
//百分比圆环
ctx_2.beginPath();
ctx_2.arc(canvas_2.width / 2, canvas_2.height / 2, canvas_2.width / 2 - ctx_2.lineWidth / 2, 0, angle * Math.PI / 180, false);
angle++;
var percentAge = parseInt((angle / 360) * 100)
if (angle > (percent / 100 * 360)) {
percentAge = percent
window.cancelAnimationFrame(timer);
};
ctx_2.stroke();
ctx_2.closePath();
ctx_2.save();
ctx_2.beginPath();
ctx_2.rotate(90 * Math.PI / 180)
ctx_2.font = '30px Arial';
ctx_2.fillStyle = '#000';
var text = percentAge + '%';
ctx_2.fillText(text, 80, -90);
var text_2=100-percentAge + 'timer';
ctx_2.fillText(text_2, 50, -50 );
ctx_2.closePath();
ctx_2.restore();
})()
}
window.onload = inte(100);
</script>
</body>
</html>
Canvas如何自适应浏览器的大小
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- Go 旅城通票 2016-11-11 13:53关注
你这个进度条是圆形的,只能选取高度或者宽度最小值进行设置,自己动态设置canvas的width/height为其中的最大值
<div class="circle" id="circle"> <canvas id="canvas_1" width="200" height="200"></canvas> <canvas id="canvas_2" width="200" height="200"></canvas> </div> <script> var css1Compat = document.compatMode == 'CSS1Compat', target = css1Compat ? 'documentElement' : 'body', clientHeight = document[target].clientHeight, clientWidth = document[target].clientWidth; var m = Math.min(clientWidth, clientHeight); document.getElementById('circle').style.height = document.getElementById('circle').style.width = document.getElementById('canvas_1').style.height = document.getElementById('canvas_1').style.width = document.getElementById('canvas_2').style.height = document.getElementById('canvas_2').style.width = m + 'px'; //.............原来的代码,就加上面重置宽度高度的,circle那个div加id
解决 无用评论 打赏 举报
悬赏问题
- ¥15 求差集那个函数有问题,有无佬可以解决
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名
- ¥65 汇编语言除法溢出问题