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
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题