swenbf 2016-11-11 09:50 采纳率: 0%
浏览 3333

Canvas如何自适应浏览器的大小

 从网上找的环形进度条代码如下,请问该如何改动才能让次进度条可以自适应屏幕的大小,最大分辨率为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>

  • 写回答

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 请完成下列相关问题!