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 11 HTML / CSS
CSS3 box-sizing属性
Apr 17 HTML / CSS
CSS3 伪类选择器 nth-child()说明
Jul 10 HTML / CSS
网页切图的CSS和布局经验与要点
Apr 09 HTML / CSS
CSS3+Sprite实现僵尸行走动画特效源码
Jan 27 HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
Mar 07 HTML / CSS
css3编写浏览器背景渐变背景色的方法
Mar 05 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
html5 application cache遇到的严重问题
Dec 26 HTML / CSS
HTML5播放实现rtmp流直播
Jun 16 HTML / CSS
纯CSS实现酷炫的霓虹灯效果
Apr 13 HTML / CSS
HTML5页面打开微信小程序功能实现
Sep 23 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
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
CentOS安装php v8js教程
2015/02/26 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python函数装饰器实现方法详解
2018/12/22 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
css3选择器基本介绍
2014/12/15 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
电气自动化个人求职信范文
2014/02/03 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
小学开学标语
2014/07/01 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
一行Python命令实现批量加水印
2022/04/07 Python