HTML5 Canvas自定义圆角矩形与虚线示例代码


Posted in HTML / CSS onAugust 02, 2013

HTML5 Canvas自定义圆角矩形与虚线(RoundedRectangle and Dash Line)

实现向HTML Canvas 2d context绘制对象中添加自定义的函数功能演示,如何绘制虚线以及控制虚线间隔大小,学会绘制圆角矩形的技巧。

HTML5 Canvas绘制对象中提供的原生功能没有实现绘制圆角矩形与虚线的功能,但是通过JavaScript语言的Object.prototype可以实现对对象CanvasRenderingContext2D添加这两个函数功能。代码的演示效果如下:
HTML5 Canvas自定义圆角矩形与虚线示例代码 
组件fishcomponent.js的代码如下:

复制代码
代码如下:

CanvasRenderingContext2D.prototype.roundRect =
function(x, y, width, height, radius, fill, stroke) {
if (typeof stroke == "undefined") {
stroke = true;
}
if (typeof radius === "undefined") {
radius = 5;
}
this.beginPath();
this.moveTo(x + radius, y);
this.lineTo(x + width - radius, y);
this.quadraticCurveTo(x + width, y, x + width, y + radius);
this.lineTo(x + width, y + height - radius);
this.quadraticCurveTo(x + width, y + height, x + width - radius, y+ height);
this.lineTo(x + radius, y + height);
this.quadraticCurveTo(x, y + height, x, y + height - radius);
this.lineTo(x, y + radius);
this.quadraticCurveTo(x, y, x + radius, y);
this.closePath();
if (stroke) {
this.stroke();
}
if (fill) {
this.fill();
}
};
CanvasRenderingContext2D.prototype.dashedLineTo = function (fromX, fromY, toX, toY, pattern) {
// default interval distance -> 5px
if (typeof pattern === "undefined") {
pattern = 5;
}
// calculate the delta x and delta y
var dx = (toX - fromX);
var dy = (toY - fromY);
var distance = Math.floor(Math.sqrt(dx*dx + dy*dy));
var dashlineInteveral = (pattern <= 0) ? distance : (distance/pattern);
var deltay = (dy/distance) * pattern;
var deltax = (dx/distance) * pattern;
// draw dash line
this.beginPath();
for(var dl=0; dl<dashlineInteveral; dl++) {
if(dl%2) {
this.lineTo(fromX + dl*deltax, fromY + dl*deltay);
} else {
this.moveTo(fromX + dl*deltax, fromY + dl*deltay);
}
}
this.stroke();
};

HTML中调用演示:
复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="chrome=IE8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Canvas Rounded Rectangle Demo</title>
<script src="fishcomponent.js"></script>
<link href="default.css" rel="stylesheet" />
<script>
var ctx = null; // global variable 2d context
var imageTexture = null;
window.onload = function() {
var canvas = document.getElementById("text_canvas");
console.log(canvas.parentNode.clientWidth);
canvas.width = canvas.parentNode.clientWidth;
canvas.height = canvas.parentNode.clientHeight;
if (!canvas.getContext) {
console.log("Canvas not supported. Please install a HTML5 compatible browser.");
return;
}
var context = canvas.getContext('2d');
context.strokeStyle="red";
context.fillStyle="RGBA(100,255,100, 0.5)";
context.roundRect(50, 50, 150, 150, 5, true);
context.strokeStyle="blue";
for(var i=0; i<10; i++) {
var delta = i*20;
var pattern = i*2+1;
context.dashedLineTo(250, 50+delta, 550, 50+delta, pattern);
}
}
</script>
</head>
<body>
<h1>HTML5 Canvas Dash-line Demo - By Gloomy Fish</h1>
<pre>Dash line and Rounded Rectangle</pre>
<div id="box_plot">
<canvas id="text_canvas"></canvas>
</div>
</body>
</html>
HTML / CSS 相关文章推荐
CSS3 三维变形实现立体方块特效源码
Dec 15 HTML / CSS
CSS3属性使网站设计增强同时不消弱可用性
Aug 29 HTML / CSS
CSS3盒子模型详解
Apr 24 HTML / CSS
浏览器实现移动端高性能css3动画(开启gpu加速)
Dec 23 HTML / CSS
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
May 17 HTML / CSS
浅谈css3新单位vw、vh、vmin、vmax的使用详解
Dec 01 HTML / CSS
html5 worker 实例(一) 为什么测试不到效果
Jun 24 HTML / CSS
HTML5 创建canvas元素示例代码
Jun 04 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
canvas 实现 github404动态效果的示例代码
Nov 15 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
May 13 HTML / CSS
纯CSS打字动画的实现示例
Aug 05 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
Aug 02 #HTML / CSS
使用HTML5的File实现base64和图片的互转
Aug 01 #HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 #HTML / CSS
html5文字阴影效果text-shadow使用示例
Jul 25 #HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
Jul 25 #HTML / CSS
html5记忆翻牌游戏实现思路及代码
Jul 25 #HTML / CSS
html5 乒乓球(碰撞检测)实例二
Jul 25 #HTML / CSS
You might like
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
JS中style属性
2006/10/11 Javascript
JavaScript的面向对象(一)
2006/11/09 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
大学生专科学习生活的自我评价
2013/12/07 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
2014年绿化工作总结
2014/12/09 职场文书
教师求职自荐信
2015/03/26 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
Java SSM配置文件案例详解
2021/08/30 Java/Android
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Python必备技巧之字符数据操作详解
2022/03/23 Python