首頁 web前端 H5教程 html5 canvas (三)

html5 canvas (三)

May 17, 2016 am 09:09 AM
admin html5

这节讲canvas的画线
0)基本结构先写好
  •        你的浏览器不支持canvas!
  • <script></script>
  •     var myCanvas = document.getElementById("myCanvas");
  •     var context =  myCanvas.getContext("2d");

1)首先设置线条颜色
  • context.strokeStyle = "rgba(0,0,0,.2)"//可以使用css颜色字串(rgb,rgba,hsl,hsla)
  • context.fillStyle = "#ff9966"//设置填充颜色//和上面一样
RGBA就是传统的RGB多了个alpha值,代表透明度(值在0~1之间,0为完全透明,1为完全不透明)
HSLA(e.g:“hsla(0,50%,50%,0)”)是css3中新增的,其中H代表色相(值在0~360之间),S和L分别代表饱和度和亮度(值在0%~100%之间)

2)画线方法
  • context.moveTo(x0, y0);//画笔移到x0,y0处
  • context.moveTo(x1, y1);//从x0,y0到x1,y1画条线
  • context.moveTo(x2, y2);//从x1,y1到x2,y2画条线
  • context.fill();//填充形状
  • context.stroke();//画线
3)绘制路径
  • context . beginPath() //清空子路径
  • context . closePath() //闭合路径
beginPath 方法重设绘图上下文的子路径列表,并清空所有的子路径。
closePath 方法在绘图上下文如果没有子路径时,什么也不做;否则,
它先把最后一个子路径标示为闭合,然后建立一个包含最后子路径的第一个
点的子路径,并加入到绘图上下文。有点拗口,其一般可以看为,假如最后
一个子路径,我们命名为 spN,假设 spN 有多个点,则用直线连接 spN 的最
后一个点和第一个点,然后关闭此路径和 moveTo 到第一个点。
下面利用上面的知识画一个三角形
  •        你的浏览器不支持canvas!
  • <script></script>
  •     var myCanvas = document.getElementById("myCanvas");
  •     var context =  myCanvas.getContext("2d");
  •         context.fillStyle ='rgba(255,0,0,.3)';//填充颜色:红色,半透明
  •         context.strokeStyle ='hsl(120,50%,50%)';//线条颜色:绿色
  •         context.lineWidth = 13;//设置线宽
  •         context.beginPath();
  •         context.moveTo(200,100);
  •         context.lineTo(100,200);
  •         context.lineTo(300,200);
  •         context.closePath();//可以把这句注释掉再运行比较下不同
  •         context.stroke();//画线框
  •         context.fill();//填充颜色

4)canvas的状态
每个上下文都包含一个绘图状态的堆,绘图状态包含下列内容:
当前的 transformation matrix.
当前的 clipping region
当前的属性值:fillStyle, font, globalAlpha,  
globalCompositeOperation, lineCap, lineJoin,
lineWidth, miterLimit, shadowBlur, shadowColor,
shadowOffsetX, shadowOffsetY, strokeStyle, textAlign,  
textBaseline
  • context . restore() //弹出堆最上面保存的绘图状态
  • context.save() //在绘图状态堆上保存当前绘图状态
举一个简单的例子,假如你设置了线条颜色为红色,然后context.save();然后设置线条颜色为绿色,再context.restore()一下,这时线条的颜色实际为红色,所以一般的画图方法是这样的
  • context.save() ;
  • drawing codes…
  • context.restore();
5)变换
  • context.translate(x, y) //移动 Canvas 的原点到x,y处
  • context.rotate(angle)  //按给定的弧度旋转,按顺时针旋转
默认原点是0,0处,如果context.translate(10, 10),canvas的原点就变成10,10了,rotate时也以10,10为中心旋转

下面利用变换画一个正N边型
  •        你的浏览器不支持canvas!
  • <script></script>
  •     var myCanvas = document.getElementById("myCanvas");
  •     var context =  myCanvas.getContext("2d");
  •         function drawPath(x, y, n, r)
  •         {
  •                 var i,ang;
  •                 ang = Math.PI*2/n //旋转的角度

  •                 context.save();//保存状态
  •                 context.fillStyle ='rgba(255,0,0,.3)';//填充红色,半透明
  •                 context.strokeStyle ='hsl(120,50%,50%)';//填充绿色
  •                 context.lineWidth = 1;//设置线宽

  •                 context.translate(x, y);//原点移到x,y处,即要画的多边形中心
  •                 context.moveTo(0, -r);//据中心r距离处画点

  •                 context.beginPath();
  •                 for(i = 0;i
  •                 {
  •                         context.rotate(ang)//旋转
  •                         context.lineTo(0, -r);//据中心r距离处连线
  •                 }
  •                 context.closePath();

  •                 context.stroke();
  •                 context.fill();
  •                 context.restore();//返回原始状态
  •         }

  •         drawPath(100, 100, 5, 40)//在100,100处画一个半径为40的五边形
  •         drawPath(200, 100, 3, 40)//在200,100处画一个半径为40的三角形
  •         drawPath(300, 100, 7, 40)//在300,100处画一个半径为40的七边形
  •         drawPath(100, 200, 15, 40)//在100,200处画一个半径为40的十五边形
  •         drawPath(200, 200, 4, 40)//在100,200处画一个半径为40的四边形




本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1248
24
HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

See all articles