封装canvas文本函数

最近没事看了会canvas的API,发现canvas在绘图很多方面都很强。但是在文本API上就显得不够深入。

比如,文本换行,或文本区域等。花了点时间,写了个小函数。也不知道能不能用上。记录下。欢迎指教。

<!DOCTYPE html>
<html>
<meta charset="utf-8">

<body>

<canvas id="myCanvas" width="555" height="444" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.
</canvas>

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");

font(ctx,{
text:‘我的名字叫andy,今年30,住在北京,<br>是一个前端工程师。谢谢。‘,
basic:[100,50,200,200],
css:‘font-size:30px;line-height:40px;font-family:Arial;color:#fff;background-color:#ccc‘,
other:{
blank:false,//是否首行空两格,可选
enter:false,//回车是否空一行
word:false//英文强制单词换行
}
});

function font(ctx,json){
var left=json.basic[0],
top=json.basic[1],
maxWidth=json.basic[2],
maxHeight=json.basic[3],
css=json.css.split(‘;‘),
jsonCss={},
text=json.text,
other=json.other;
ctx.textBaseline=‘top‘;
for(var i=0;i<css.length;i++)
{
var css2=css[i].split(‘:‘);
jsonCss[css2[0]]=css2[1];
};
var font=jsonCss[‘font-size‘]||‘‘;
var family=jsonCss[‘font-family‘]||‘‘;
var color=jsonCss[‘color‘]||‘‘;
ctx.font=‘‘+font+‘ ‘+family;
ctx.fillStyle=jsonCss[‘color‘]||‘#000‘;
if(jsonCss[‘background-color‘])
{
ctx.fillStyle=jsonCss[‘background-color‘];
ctx.fillRect(left,top,maxWidth,maxHeight);
};
var fontSize=parseInt(jsonCss[‘font-size‘]),
lineHeight=parseInt(jsonCss[‘line-height‘]);
var space=parseInt((lineHeight-fontSize)/2);
var enter=other.enter||false;
text=text.split(‘<br>‘)!=-1?text.split(‘<br>‘):[text];
var word=other.word||false;
var w=0;
var h=0;
ctx.fillStyle=color;

for(var j=0;j<text.length;j++)
{
var sText=text[j];
var end=false;
w=other.blank?parseInt(font)*2:0;

for(var i=0;i<sText.length;i++)
{
var re=/[a-zA-Z]+/;

if(word)
{
if(re.test(sText[i])&&!re.test(sText[i-1]))
{
var English=sText.substring(i);
var tw=ctx.measureText(English).width;
if(w+tw>maxWidth)
{
w=0;
h+=lineHeight;
};
};
};
var tw=ctx.measureText(sText[i]).width;
if(w+tw>maxWidth)
{
w=0;
h+=lineHeight;
};

if(h+lineHeight>maxHeight)
{
end=true;
break;
};

ctx.fillText(sText[i],left+w,top+h+space);
w+=tw;
};
if(end)break;
h+=lineHeight;
if(enter)h+=lineHeight;
};
};
</script>

</body>
</html>

时间: 2024-11-03 15:07:36

封装canvas文本函数的相关文章

html5 canvas文本处理

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

canvas文本自动换行

在用canvas中写刮奖结果的时候发现canvas中的文本不会自动折行,要进行截断另起一行来写.在此参考文章html5-canvas的绘制文本自动换行来做改写. 根据canvas宽度来做折行 在此根据项目的情况让文本占canvas的八分之五,具体可以根据情况改变所占百分比来显示. /* str:要绘制的字符串 canvas:canvas对象 initX:绘制字符串起始x坐标 initY:绘制字符串起始y坐标 lineHeight:字行高 */ function canvasTextAutoLin

JS_ECMA基本语法中的几种封装的小函数-2

大家好!今天继续给大家写一下ECMA中的剩下的小函数以及实用的实例: 首先先给大家说一下字符串.数组.数学方法以及json的一点小知识点: 字符串方法: str.length str.charAt(i):取字符串中的某一个; str.indexOf('e');找第一个出现的位置;找不到返回-1; str.lastIndexOf('e'):找最后一个e出现的位置;找不到返回-1; str.toUpperCase();转大写 str.toLowerCase();转小写 str.substring(起

JS_ECMA基本语法中的几种封装的小函数

先来回顾一下我们的字符串: 字符串方法: str.length str.charAt(i):取字符串中的某一个; str.indexOf('e');找第一个出现的位置;找不到返回-1; str.lastIndexOf('e'):找最后一个e出现的位置;找不到返回-1; str.toUpperCase();转大写 str.toLowerCase();转小写 str.substring(起始位置,结束位置):字符串截取; str.split('切割的方式');字符串切割;字符串转数组;数组方法:删除

Wince 文本函数和字体应用

好像又进入了一个疲惫期了,晚上状态不好,但是还是想继续更新下博客,继上次分析了wince下设备环境以及怎么绘制相关图像后,,笔者在这片文章中讲到文本函数以及其相关应用.文本输出函数是输出文本的内容,也就是在一个窗体之上将文字输出的一个函数,当然输出文字有些居左居右居中的限制,例如显示背景颜色,前进颜色的一些输出设置,在wince中,字体是一个比较大的资源,它占据了很大的空间.所以wince当中所有的字体很少,但是它提供了一种方法,让我们可以自定义字体,这个简直nice呀,下面我来具体介绍一下上面

HTML5 Canvas arc()函数//////////////////////(转)

HTML5 Canvas arc()函数 实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(100,75,50,0,2*Math.PI); ctx.stroke(); 浏览器支持 Internet Explorer 9.Firefox.Opera.Chrome 以及 Safari 支持 arc() 方法.

AJAX编程-封装ajax工具函数

即 Asynchronous [e's??kr?n?s] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器进行通信. XMLHttpRequest可以以异步方式的处理程序,浏览器内建对象,用于在后台与服务器通信(交换数据) ,由此我们便可实现对网页的部分更新,而不是刷新整个页面. 封装ajax工具函数 $.ajax = function(options){ if(!options) return fal

JS封装cookie操作函数实例(设置、读取、删除)

本文实例讲述了JS封装cookie操作函数.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 /*设置cookie*/ function setCookie(name, value, iDay) {   var oDate=new Date();   oDate.setDate(oDate.getDate()+iDay);   document.cook

JavaScript封装Ajax工具函数及jQuery中的ajax

封装ajax工具函数 /** * ITCAST WEB * Created by zhousg on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. 是异步的还是同步的 async false true * 4. 请求内容的格式 contentType * 5. 传输的数据 data json对象 * * 6.响应成功处理函数 success function * 7.响应失败的处理函数 error function *