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代码绘制可爱的Hello Kitty猫
Aug 03 HTML / CSS
css3绘制天猫logo实现代码
Nov 06 HTML / CSS
CSS3中Transition动画属性用法详解
Jul 04 HTML / CSS
CSS Houdini实现动态波浪纹效果
Jul 30 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
Nov 16 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
Jul 11 HTML / CSS
关于 HTML5 的七个传说小结
Apr 12 HTML / CSS
HTML5中新标签和常用标签详解
Mar 07 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
Apr 14 HTML / CSS
HTML5移动端手机网站开发流程
Apr 25 HTML / CSS
使用phonegap获取位置信息的实现方法
Mar 31 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
Mar 21 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php 购物车实例(申精)
2009/05/11 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python实现点对点聊天程序
2018/07/28 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
postman传递当前时间戳实例详解
2019/09/14 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
python如何从键盘获取输入实例
2020/06/18 Python
python爬取招聘要求等信息实例
2020/11/20 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
英文商务邀请信
2014/01/22 职场文书
毕业实习评语
2014/02/10 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
比赛口号大全
2014/06/10 职场文书
学习张林森心得体会
2014/09/10 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
先进党支部申报材料
2014/12/24 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书