canvas教程

HTML5:Canvas很好的一个Demo(2)

字号+ 作者:H5之家 来源:H5之家 2016-12-18 15:01 我要评论( )

值得一提的是, arc() 方法中第四和第五个参数使用的都是弧度值,不过我们一般喜欢使用角度,比如 360 度,而不是 2 PI,所以我们可以写一个转换函数,然后你就可以尽情的使用熟悉的角度值了。 function degreesToR

值得一提的是, arc() 方法中第四和第五个参数使用的都是弧度值,不过我们一般喜欢使用角度,比如 360 度,而不是 2 PI,所以我们可以写一个转换函数,然后你就可以尽情的使用熟悉的角度值了。

function degreesToRadians(degrees) { return (degrees * Math.PI) / 180; }

下面,你就可以画出下面这样的效果。

图形已经绘制完毕了,我们就去看看如何绘制文字,首先我们的获取输入控件中输入的文字,然后我们需要使用 context 的 measureText() 测量文字的宽度,因为我们想让文字居中。

function drawText(canvas, context) { var selectObj = document.getElementById("foregroundColor"); var index = selectObj.selectedIndex; var fgColor = selectObj[index].value; var fontSize = "24"; context.fillStyle = fgColor; context.font = "bold " + fontSize + "px sans-serif"; context.textAlign = "left"; var message = document.getElementById("message").value; var messageWidth = context.measureText(message).width; var x = Math.floor(canvas.width / 2 - messageWidth / 2); var y = Math.floor(canvas.height / 2 - fontSize / 2); context.fillText(message, x, y); }

可以使用 context.font 设置文字相关的信息,第一个参数是 font style , 可以设置为 bold 或者 italic ,第二个参数是文字的大小,第三个参数是 font family ,这里我指定为 sans-serif 。

你可能还有疑问的是, context.textAlign 是什么玩意?这个就是设置 fillText() 中 x 坐标指定的是文本哪个部位的坐标,如果你设置为 center ,那么这个 x 就是文本中间的 x 坐标。当然我们这里设置为 left 就是文本最左边的 x 坐标。

那么问题来了,我们为什么还要使用 measureText() 这么费劲的测试文本的宽度使文本居中呢?的确如此,我们可以使用 textAlign 轻易的实现文本居中,下面是对上述函数的改写。

function drawText(canvas, context) { var selectObj = document.getElementById("foregroundColor"); var index = selectObj.selectedIndex; var fgColor = selectObj[index].value; var fontSize = "24"; context.fillStyle = fgColor; context.font = "bold " + fontSize + "px sans-serif"; context.textAlign = "center"; // change var x = Math.floor(canvas.width / 2); // change var y = Math.floor(canvas.height / 2 - fontSize / 2); var message = document.getElementById("message").value; context.fillText(message, x, y); }

文字也绘制完毕了,下面就绘制图形右下角的笑脸图片,当然这是个图片,不是一笔一笔画出来的。

function drawImage(canvas, context) { var smileImage = new Image(); smileImage.src = "smile.png"; smileImage.onload = function() { context.drawImage(smileImage, 632, 272, 24, 24); } }

drawImage() 的第二个参数是图形的左上角的 x 坐标,第三个参数是左上角的 y 坐标,第四个参数是图形的宽度,第五个参数是图形的高度。

这里为什么还是用一个 onload 呢?因为图片总是需要加载的,如果图片还没有加载完毕,就开始去绘制图片,肯定会绘制失败,所以我们利用一个回调,当图片加载完毕,再去绘制图片。

最后再来介绍一个目前浏览器支持不是很好的属性,我们可以将这个 Canvas 转化为一个图片,怎么样?听上去是不是很心动,其实写起来很容易。

function makeImage() { var canvas = document.getElementById("myCanvas"); canvas.onclick = function() { window.location = canvas.toDataURL("image/png"); } }

这个时候,如果你的浏览器支持的话,只要你点击一些画布,那么就会有一个图片版本弹出来,供你保存到本地。

我在我的电脑上做了测试,只有 Firefox 支持这个功能,我喜欢的 Google Chrome, Opera, Yandex 在这方面的支持还不尽如人意。

如果你想要项目的源码,你可以到 我的 Github 下载源码。


分享给小伙伴们:

本文标签: HTML5,Canvas/">HTML5,Canvas

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

  • 本类最热新闻

  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • android入门教程Andorid绘图Canvas

      android入门教程Andorid绘图Canvas

      2016-12-18 15:02

    • html5 Canvas画图:1像素线条模糊问题

      html5 Canvas画图:1像素线条模糊问题

      2016-12-16 17:02

    • OpenCanvas v6.0.1.0 破解版 (32位/64位)

      OpenCanvas v6.0.1.0 破解版 (32位/64位)

      2016-12-16 17:01

    • canvas 动态画线

      canvas 动态画线

      2016-12-16 11:02

    网友点评
    9