首页 > 其他分享 >canvas拓展 实现圆形区域清理

canvas拓展 实现圆形区域清理

时间:2022-08-31 16:22:07浏览次数:44  
标签:canvas calcWidth 清理 ctx 圆形 radius context var

有两种方法:

第一种:clearRect()的方法

canvas提供的clearRect(x, y, width, height)方法只能清理出特定位置的矩形区域,以下代码则能实现对圆形区域的清

理,主要是利用计算圆周率时的方法,将整个圆切成一个一个细小的正方形,然后再通过clearRect(x, y, width, height)

方法将一个一个细小的正方形区域清理。

<!DOCTYPE html>
<html>
    <head>
        <style>
            canvas{ border:1px solid black;}
            body{ margin:0;padding:0;}
        </style>
    </head>
    <body>
        <canvas id="canvas" width="400" height="400"></canvas>
        <script>
            var canvas=document.getElementById('canvas');
            var context=canvas.getContext('2d');
            
            context.beginPath();
            context.fillStyle="blue";
            context.arc(200,200,100,0,360*Math.PI/180);
            context.fill();
            
            function clearArc(x,y,radius){//圆心(x,y),半径radius
                var calcWidth=radius-stepClear;
                var calcHeight=Math.sqrt(radius*radius-calcWidth*calcWidth);
                
                var posX=x-calcWidth;
                var posY=y-calcHeight;
                
                var widthX=2*calcWidth;
                var heightY=2*calcHeight;
                
                if(stepClear<=radius){
                    context.clearRect(posX,posY,widthX,heightY);
                    stepClear+=1;
                    clearArc(x,y,radius);
                }
            }
            var stepClear=1;//别忘记这一步
            clearArc(210,230,50);
        </script>
    </body>
</html>

实现的效果不是很好,有好多模糊的部分,尤其放大以后,好多矩形

第二种cli()的方法:

     ctx.beginPath();
     ctx.rect(0, 0, canvas.width, canvas.height); 
     ctx.arc(x,y,r,0,Math.PI * 2,true);//顺时针方向
     ctx.clip();
     ctx.closePath();
     ctx.fillStyle="rgba(255,255,255,0.7)";
     ctx.fillRect(0, 0, canvas.width, canvas.height);

图中x,y,r分别代表圆的坐标和半径

标签:canvas,calcWidth,清理,ctx,圆形,radius,context,var
From: https://www.cnblogs.com/heibaiqi/p/16643492.html

相关文章

  • demo:canvas 绘制图片、并保存在相册,并使图片保持原始大小和清晰度
    1<template>2<viewclass="content">3<buttontype="primary"@click="selectImage">选择图片</button>4<canvasid="myCanvas"type......
  • 如何使用CleanMyMac X的空间透镜功能快速决策清理垃圾?
    CleanMyMac是一款专业的苹果电脑清理软件,它支持快速清扫电脑垃圾、卸载应用程序和清理隐私痕迹等常用功能,同时还支持使用其强大的空间透镜功能,像Windows系统一样实时浏览电......
  • CleanMyMac清理垃圾时频繁要求输入密码如何解决?
    有不少用户反馈在使用CleanMyMac清理系统垃圾文件的时候会频繁要求输入开机密码,想要进行更改,不管是新版本还是老版本都是这样,今天小编为您带来了CleanMyMac清理垃圾时频繁......
  • 重构/清理代码:为什么?
    重构/清理代码:为什么?ImagebyU飞溅代码重构的主要目的是减少技术债务,使我们的代码质量更高、易于维护、干净、可读性和开发成本也将降低。我们去看看有哪些因素?编写......
  • 直播app开发搭建,uniapp实现canvas画倾斜的圆
    直播app开发搭建,uniapp实现canvas画倾斜的圆首先在uni的canvas里面是没有画椭圆的函数的,想要实现椭圆有很多种方法 可以使用lineTo不停的改变很小的间距来画但是十分......
  • 清理oracle注册表
    来自百度,亲测有效!!!1.首先打开服务:选中此电脑->点击右键->选择管理->选择服务和应用程序->服务,在右边查看并停止以oracle开头的服务(选中正在运行的以oracle开头的服务->单击......
  • 文件数据清理工具推荐
    为大家分享一款文件数据清理工具,GhostBusterProforMac能够快速扫描计算机来查找以前删除的应用程序中残留的数据,你可以自由选择要删除的数据以及要保留的数据,支持一键......
  • SQL Server 清理日志
    数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQLServer数据库都有log文件,log文件记录用户对数据库修改的操作。可以通过直接删......
  • 数据库死锁监视器清理变更
    数据库死锁监视器清理变更一. 清理数据库死锁监控日志操作涉及主机:主机名(IP)(请修改以下文档的实例名、路径等)1、 查看设置的事件监视器db2"selectsubstr(evmonname,1,......
  • Canvas的context.beginPath()很重要
    在开发一个小画板,用到canvas,做了一个油漆桶工具,每次填色,都会填到几个不同的图案里,而我想要的只是一个一个的填色,点哪个给哪个填色,找了半天,原因原来是画图时没......