html5中文学习网

您的位置: 首页 > html5教程 > 入门教程 » 正文

HTML5 Canvas自定义圆角矩形与虚线示例代码_html5教程技巧

[ ] 已经帮助:人解决问题
点评:HTML5 Canvas绘制对象中提供的原生功能没有实现绘制圆角矩形与虚线的功能,通过JavaScript的Object.prototype可以实现对对象CanvasRenderingContext2D添加这两个函数功能,具体实现如下,感兴趣的朋友可以参考下
HTML5 Canvas自定义圆角矩形与虚线(RoundedRectangle and Dash Line) ZLCHTML5中文学习网 - HTML5先行者学习网
ZLCHTML5中文学习网 - HTML5先行者学习网
实现向HTML Canvas 2d context绘制对象中添加自定义的函数功能演示,如何绘制虚线以及控制虚线间隔大小,学会绘制圆角矩形的技巧。 ZLCHTML5中文学习网 - HTML5先行者学习网
ZLCHTML5中文学习网 - HTML5先行者学习网
HTML5 Canvas绘制对象中提供的原生功能没有实现绘制圆角矩形与虚线的功能,但是通过JavaScript语言的Object.prototype可以实现对对象CanvasRenderingContext2D添加这两个函数功能。代码的演示效果如下: ZLCHTML5中文学习网 - HTML5先行者学习网
 ZLCHTML5中文学习网 - HTML5先行者学习网
组件fishcomponent.js的代码如下: ZLCHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
ZLCHTML5中文学习网 - HTML5先行者学习网
CanvasRenderingContext2D.prototype.roundRect = ZLCHTML5中文学习网 - HTML5先行者学习网
function(x, y, width, height, radius, fill, stroke) { ZLCHTML5中文学习网 - HTML5先行者学习网
if (typeof stroke == "undefined") { ZLCHTML5中文学习网 - HTML5先行者学习网
stroke = true; ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
if (typeof radius === "undefined") { ZLCHTML5中文学习网 - HTML5先行者学习网
radius = 5; ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
this.beginPath(); ZLCHTML5中文学习网 - HTML5先行者学习网
this.moveTo(x + radius, y); ZLCHTML5中文学习网 - HTML5先行者学习网
this.lineTo(x + width - radius, y); ZLCHTML5中文学习网 - HTML5先行者学习网
this.quadraticCurveTo(x + width, y, x + width, y + radius); ZLCHTML5中文学习网 - HTML5先行者学习网
this.lineTo(x + width, y + height - radius); ZLCHTML5中文学习网 - HTML5先行者学习网
this.quadraticCurveTo(x + width, y + height, x + width - radius, y+ height); ZLCHTML5中文学习网 - HTML5先行者学习网
this.lineTo(x + radius, y + height); ZLCHTML5中文学习网 - HTML5先行者学习网
this.quadraticCurveTo(x, y + height, x, y + height - radius); ZLCHTML5中文学习网 - HTML5先行者学习网
this.lineTo(x, y + radius); ZLCHTML5中文学习网 - HTML5先行者学习网
this.quadraticCurveTo(x, y, x + radius, y); ZLCHTML5中文学习网 - HTML5先行者学习网
this.closePath(); ZLCHTML5中文学习网 - HTML5先行者学习网
if (stroke) { ZLCHTML5中文学习网 - HTML5先行者学习网
this.stroke(); ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
if (fill) { ZLCHTML5中文学习网 - HTML5先行者学习网
this.fill(); ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
}; ZLCHTML5中文学习网 - HTML5先行者学习网
CanvasRenderingContext2D.prototype.dashedLineTo = function (fromX, fromY, toX, toY, pattern) { ZLCHTML5中文学习网 - HTML5先行者学习网
// default interval distance -> 5px ZLCHTML5中文学习网 - HTML5先行者学习网
if (typeof pattern === "undefined") { ZLCHTML5中文学习网 - HTML5先行者学习网
pattern = 5; ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
// calculate the delta x and delta y ZLCHTML5中文学习网 - HTML5先行者学习网
var dx = (toX - fromX); ZLCHTML5中文学习网 - HTML5先行者学习网
var dy = (toY - fromY); ZLCHTML5中文学习网 - HTML5先行者学习网
var distance = Math.floor(Math.sqrt(dx*dx + dy*dy)); ZLCHTML5中文学习网 - HTML5先行者学习网
var dashlineInteveral = (pattern <= 0) ? distance : (distance/pattern); ZLCHTML5中文学习网 - HTML5先行者学习网
var deltay = (dy/distance) * pattern; ZLCHTML5中文学习网 - HTML5先行者学习网
var deltax = (dx/distance) * pattern; ZLCHTML5中文学习网 - HTML5先行者学习网
// draw dash line ZLCHTML5中文学习网 - HTML5先行者学习网
this.beginPath(); ZLCHTML5中文学习网 - HTML5先行者学习网
for(var dl=0; dl<dashlineInteveral; dl++) { ZLCHTML5中文学习网 - HTML5先行者学习网
if(dl%2) { ZLCHTML5中文学习网 - HTML5先行者学习网
this.lineTo(fromX + dl*deltax, fromY + dl*deltay); ZLCHTML5中文学习网 - HTML5先行者学习网
} else { ZLCHTML5中文学习网 - HTML5先行者学习网
this.moveTo(fromX + dl*deltax, fromY + dl*deltay); ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
this.stroke(); ZLCHTML5中文学习网 - HTML5先行者学习网
}; ZLCHTML5中文学习网 - HTML5先行者学习网
ZLCHTML5中文学习网 - HTML5先行者学习网
HTML中调用演示: ZLCHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
ZLCHTML5中文学习网 - HTML5先行者学习网
<!DOCTYPE html> ZLCHTML5中文学习网 - HTML5先行者学习网
<html> ZLCHTML5中文学习网 - HTML5先行者学习网
<head> ZLCHTML5中文学习网 - HTML5先行者学习网
<meta http-equiv="X-UA-Compatible" content="chrome=IE8"> ZLCHTML5中文学习网 - HTML5先行者学习网
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> ZLCHTML5中文学习网 - HTML5先行者学习网
<title>Canvas Rounded Rectangle Demo</title> ZLCHTML5中文学习网 - HTML5先行者学习网
<script src="fishcomponent.js"></script> ZLCHTML5中文学习网 - HTML5先行者学习网
<link href="default.css" rel="stylesheet" /> ZLCHTML5中文学习网 - HTML5先行者学习网
<script> ZLCHTML5中文学习网 - HTML5先行者学习网
var ctx = null; // global variable 2d context ZLCHTML5中文学习网 - HTML5先行者学习网
var imageTexture = null; ZLCHTML5中文学习网 - HTML5先行者学习网
window.onload = function() { ZLCHTML5中文学习网 - HTML5先行者学习网
var canvas = document.getElementById("text_canvas"); ZLCHTML5中文学习网 - HTML5先行者学习网
console.log(canvas.parentNode.clientWidth); ZLCHTML5中文学习网 - HTML5先行者学习网
canvas.width = canvas.parentNode.clientWidth; ZLCHTML5中文学习网 - HTML5先行者学习网
canvas.height = canvas.parentNode.clientHeight; ZLCHTML5中文学习网 - HTML5先行者学习网
if (!canvas.getContext) { ZLCHTML5中文学习网 - HTML5先行者学习网
console.log("Canvas not supported. Please install a HTML5 compatible browser."); ZLCHTML5中文学习网 - HTML5先行者学习网
return; ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
var context = canvas.getContext('2d'); ZLCHTML5中文学习网 - HTML5先行者学习网
context.strokeStyle="red"; ZLCHTML5中文学习网 - HTML5先行者学习网
context.fillStyle="RGBA(100,255,100, 0.5)"; ZLCHTML5中文学习网 - HTML5先行者学习网
context.roundRect(50, 50, 150, 150, 5, true); ZLCHTML5中文学习网 - HTML5先行者学习网
context.strokeStyle="blue"; ZLCHTML5中文学习网 - HTML5先行者学习网
for(var i=0; i<10; i++) { ZLCHTML5中文学习网 - HTML5先行者学习网
var delta = i*20; ZLCHTML5中文学习网 - HTML5先行者学习网
var pattern = i*2+1; ZLCHTML5中文学习网 - HTML5先行者学习网
context.dashedLineTo(250, 50+delta, 550, 50+delta, pattern); ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
} ZLCHTML5中文学习网 - HTML5先行者学习网
</script> ZLCHTML5中文学习网 - HTML5先行者学习网
</head> ZLCHTML5中文学习网 - HTML5先行者学习网
<body> ZLCHTML5中文学习网 - HTML5先行者学习网
<h1>HTML5 Canvas Dash-line Demo - By Gloomy Fish</h1> ZLCHTML5中文学习网 - HTML5先行者学习网
<pre>Dash line and Rounded Rectangle</pre> ZLCHTML5中文学习网 - HTML5先行者学习网
<div id="box_plot"> ZLCHTML5中文学习网 - HTML5先行者学习网
<canvas id="text_canvas"></canvas> ZLCHTML5中文学习网 - HTML5先行者学习网
</div> ZLCHTML5中文学习网 - HTML5先行者学习网
</body> ZLCHTML5中文学习网 - HTML5先行者学习网
</html> ZLCHTML5中文学习网 - HTML5先行者学习网
ZLCHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助