canvas裁剪clip()函数的具体使用


Posted in HTML / CSS onMarch 01, 2018

在canvas中,可以使用clip()函数裁剪区域,设定裁剪区域后,只有在区域内的图像才能显示,其余部分会被屏蔽掉

未使用裁剪绘制一个圆

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        *{margin:0; padding:0;}  
        html, body{width:100%; height:100%; overflow:hidden; background-color:#AFAFAF;}  
    </style>  
</head>  
<body>  
    <canvas id="canvas"></canvas>  
    <script>  
        var canvas = document.getElementById('canvas'),  
            context = canvas.getContext('2d');  
        canvas.width = document.body.clientWidth;  
        canvas.height = document.body.clientHeight;  
        context.lineWidth = 3;  
        context.strokeStyle = 'red';  
        context.beginPath();  
        context.arc(200, 200, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.stroke();  
        context.closePath();  
    </script>  
</body>  
</html>

效果

canvas裁剪clip()函数的具体使用

使用clip()裁剪区域

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        *{margin:0; padding:0;}  
        html, body{width:100%; height:100%; overflow:hidden; background-color:#AFAFAF;}  
    </style>  
</head>  
<body>  
    <canvas id="canvas"></canvas>  
    <script>  
        var canvas = document.getElementById('canvas'),  
            context = canvas.getContext('2d');  
        canvas.width = document.body.clientWidth;  
        canvas.height = document.body.clientHeight;  
        context.lineWidth = 3;  
        context.strokeStyle = 'red';  
        context.rect(0, 0, 200, 200);  
        context.clip();  
        context.beginPath();  
        context.arc(200, 200, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.stroke();  
        context.closePath();  
    </script>  
</body>  
</html>

效果

canvas裁剪clip()函数的具体使用

也可以使用arc绘制圆形的剪裁区域

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        *{margin:0; padding:0;}  
        html, body{width:100%; height:100%; overflow:hidden; background-color:#AFAFAF;}  
    </style>  
</head>  
<body>  
    <canvas id="canvas"></canvas>  
    <script>  
        var canvas = document.getElementById('canvas'),  
            context = canvas.getContext('2d');  
        canvas.width = document.body.clientWidth;  
        canvas.height = document.body.clientHeight;  
        context.lineWidth = 3;  
        context.strokeStyle = 'red';  
        context.arc(100, 100, 150, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.clip();  
        context.beginPath();  
        context.arc(200, 200, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.stroke();  
        context.closePath();  
    </script>  
</body>  
</html>

效果

canvas裁剪clip()函数的具体使用

使用save和restore实现只裁剪单个路径

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        *{margin:0; padding:0;}  
        html, body{width:100%; height:100%; overflow:hidden; background-color:#AFAFAF;}  
    </style>  
</head>  
<body>  
    <canvas id="canvas"></canvas>  
    <script>  
        var canvas = document.getElementById('canvas'),  
            context = canvas.getContext('2d');  
        canvas.width = document.body.clientWidth;  
        canvas.height = document.body.clientHeight;  
        context.lineWidth = 3;  
        context.strokeStyle = 'red';  
        context.save();  
        context.rect(0, 0, 200, 200);  
        context.clip();  
        context.beginPath();  
        context.arc(200, 200, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.stroke();  
        context.closePath();  
        context.restore();  
        context.beginPath();  
        context.arc(250, 250, 100, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);  
        context.stroke();  
        context.closePath();  
    </script>  
</body>  
</html>

效果

canvas裁剪clip()函数的具体使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
使用CSS3制作倾斜导航条和毛玻璃效果
Sep 12 HTML / CSS
需要知道的CSS3动画技术
Jan 01 HTML / CSS
css3进行截取替代js的substring
Sep 02 HTML / CSS
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
Aug 19 HTML / CSS
使用css如何制作时间ICON方法实践
Nov 12 HTML / CSS
HTML5本地存储之Web Storage应用介绍
Jan 06 HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
Apr 10 HTML / CSS
详解HTML5 录音的踩坑之旅
Dec 26 HTML / CSS
Canvas系列之滤镜效果
Feb 12 HTML / CSS
Canvas图片分割效果的实现
Jul 29 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 HTML / CSS
html5.2 dialog简介详解
Feb 27 #HTML / CSS
Html5页面中的返回实现的方法
Feb 26 #HTML / CSS
简述Html5 IphoneX 适配方法
Feb 08 #HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
Feb 05 #HTML / CSS
canvas绘制视频封面的方法
Feb 05 #HTML / CSS
HTML5新特性之type=file文件上传功能
Feb 02 #HTML / CSS
HTML5 canvas 瀑布流文字效果的示例代码
Jan 31 #HTML / CSS
You might like
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
js实现分割上传大文件
2016/03/09 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
python实现从web抓取文档的方法
2014/09/26 Python
python中的__slots__使用示例
2015/02/26 Python
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
NumPy排序的实现
2020/01/21 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
青岛导游词
2015/02/12 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby