从网上找的环形进度条代码如下,请问该如何改动才能让次进度条可以自适应屏幕的大小,最大分辨率为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
解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!