canvas教程

Canvas系列学习之起始篇

字号+ 作者:H5之家 来源:H5之家 2015-09-17 17:09 我要评论( )

[代码片段]里面最让人心动的技术,对我来说,[代码片段]绝对是首选,它没出现之前,一切网页相关的游戏动画非[代码片段]莫属.当[代码片段]来临时,是时候用用新鲜的血

Canvas系列学习之起始篇

2014-08-14 10 阅读

canvas

html5里面最让人心动的技术,对我来说,canvas绝对是首选,它没出现之前,一切网页相关的游戏动画非flash莫属.

当canvas来临时,是时候用用新鲜的血液了.

Canvas入门

canvas的本质就是提供了一套前端可用的gui接口,包括画线,画方,画圆,画字等常用的gui功能,先来看看在浏览器端的引用

<canvas id="canvas" width=500 heigth=400></canvas>

这里要说下,canvas有元素大小与绘图大小之分,默认的绘图大小是300*150,假如不直接添加width,height时,启用默认值,假如在css样式表里设置width,height时,会造成意想不到的效果,因为canvas绘图承认的大小是它的绘图大小,跟元素本身大小关系不大,所以建议直接在html的元素标签上直接写上宽高,css样式表里不要设置宽高.

然后所有的绘图操作其实都是在canvas的绘图上下文中进行的,方法是调用canvas实例的getContext方法

var canvas = document.querySelector('#canvas'); var context = canvas.getContext('2d');

以后基本上所有的绘画操作都在context上面进行

今天的任务是实现一个精灵图片的鼠标定位功能,效果图如下:

精灵图片的鼠标定位

先说下这里要用到的几个功能点

先来说说绘制背景网格线

网格线是横竖两方向铺满的,原理就是不断的在两方向上画线,保证线之前的间距,直到画满为止,先上一个画一条线的例子

// 设置描边的样式 context.strokeStyle = "#ccc"; // 设置绘制线的宽度 context.lineWidth = 0.5; // 开始进入画线状态 context.beginPath(); // 移到起始点 context.moveTo(50, 50); // 连到终点 context.lineTo(100, 100); // 开始描边 context.stroke();

上面的代码就是画线的最基本实现,下面我们来看一个完整的实现背景网格的功能.

// 画背景线 function drawBackground(){ var SPACE = 15, i = canvas.height, j = canvas.width; context.clearRect(0, 0, canvas.width, canvas.height); context.strokeStyle = 'lightgray'; context.lineWidth = 0.5; while(i >= SPACE){ context.beginPath(); context.moveTo(0, i); context.lineTo(canvas.width, i); context.stroke(); i -= SPACE; } while(j >= SPACE){ context.beginPath(); context.moveTo(j, 0); context.lineTo(j, canvas.height); context.stroke(); j -= SPACE; } }

然后我们来绘制精灵图片

使用drawImage方法可以画一个图片到绘图上下文中去,这里的图片资源点击这里获取,下载

// 画精灵图 function drawImg(){ context.drawImage(img, 0, 0); } var img = new Image(); img.src = 'img/running-sprite-sheet.png'; img.onload = function(){ drawImg(); };

然后实时的根据鼠标位置来画参考线

关于坐标,这里要说下,默认事件参数里的坐标是相对于文档的,所以在canvas里画坐标的话,需要转换一下,这里给出转换的代码

// 切换网页坐标为canvas坐标 function windowToCanvas(x, y){ var bbox = canvas.getBoundingClientRect(); return { x: x - bbox.left * (canvas.width / bbox.width), y: y - bbox.top * (canvas.height / bbox.height) } }

然后我们来根据当前坐标画两条互相垂直的参考线,代码如下:

// 画垂直线 function drawVertical(x){ context.beginPath(); context.moveTo(x + 0.5, 0); context.lineTo(x + 0.5, canvas.height); context.stroke(); } // 画水平线 function drawHorizontal(y){ context.beginPath(); context.moveTo(0, y + 0.5); context.lineTo(canvas.width, y + 0.5); context.stroke(); } // 画定位网格 function drawGuidelines(x, y){ context.strokeStyle = 'rgba(0, 230, 0, .8)'; context.lineWidth = 0.5; drawVertical(x); drawHorizontal(y); }

上面就是定义一个水平和垂直的绘制方法然后定义一个总的方法来一起调用.

最后我们来定义我们的事件

这里定义canvas的mousemove事件,然后利用事件参数里的坐标信息实时的调用上面的绘制方法

canvas.onmousemove = function(e){ var loc = windowToCanvas(e.clientX, e.clientY); drawBackground(); drawImg(); drawGuidelines(loc.x, loc.y); updatePrint(loc.x, loc.y); }

其实canvas的绘图流程大概都分下面几步

总结

canvas是一个比较好玩的技术,只要你有想像力,就可以画出任何东西出来,这个系列将会全面的讲解它的用法,尽请期待.

参考[核心Html5 canvas 图形编程]

canvas

作者:

Feenan's blog

原文地址:, 感谢原作者分享。

→Es6系列之generator并发调用 ←说说 browsersync

发表评论

您可能感兴趣的博客

  • 博主 发表 2015-08-31 03:15:07 Redraw SWF Shape Data With Canvas
  • MrZheng 发表 2015-08-20 05:43:03 【原创】网页无图再不是梦想
  • CDog 发表 2015-07-11 06:22:12 Canvas初探——绘画与动画基础
  • Sarah Drasner 发表 2015-07-14 13:27:51 GSAP + SVG for Power Users 2: Complex Responsive A
  • JiaxiangZheng 发表 2015-03-29 16:00:00 HTML5 Canvas
  • Sarah Drasner 发表 2015-06-29 12:16:34 GSAP + SVG For Power Users: Motion Along A Path
  • 博主 发表 2015-06-23 05:43:07 弹幕、抽奖及投票
  • 博主 发表 2015-05-07 07:46:30 弹幕、抽奖及投票
  • 博主 发表 2015-04-18 16:05:24 前端动画对比
  • 博主 发表 2014-11-18 09:27:46 Peertc和五子棋
  • 蓝飞 发表 2014-12-02 03:00:00 [HTML5]如何在 Canvas 中绘制扇形
  • 博主 发表 2013-10-14 05:25:16 [移动端抽奖刮刮卡] Html5 Canvas 实现的可刮涂层效果
  • 您可能感兴趣的代码

     

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

    相关文章
    • html5canvas核心技术图形、动画与游戏开发源码

      html5canvas核心技术图形、动画与游戏开发源码

      2017-05-02 17:42

    • 打印html5中Canvas的方法

      打印html5中Canvas的方法

      2017-05-01 15:03

    • HTML5+Canvas调用手机拍照功能实现图片上传(下)

      HTML5+Canvas调用手机拍照功能实现图片上传(下)

      2017-04-30 17:00

    • 学习慕课网canvas倒计时实例笔记

      学习慕课网canvas倒计时实例笔记

      2017-04-30 14:01

    网友点评