国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript之Canvas_動力節點Java學院整理

2019-11-19 16:11:01
字體:
來源:轉載
供稿:網友

Canvas是HTML5新增的組件,它就像一塊幕布,可以用JavaScript在上面繪制各種圖表、動畫等。

沒有Canvas的年代,繪圖只能借助Flash插件實現,頁面不得不用JavaScript和Flash進行交互。有了Canvas,我們就再也不需要Flash了,直接使用JavaScript完成繪制。

一個Canvas定義了一個指定尺寸的矩形框,在這個范圍內我們可以隨意繪制:

<canvas id="test-canvas" width="300" height="200"></canvas>

由于瀏覽器對HTML5標準支持不一致,所以,通常在<canvas>內部添加一些說明性HTML代碼,如果瀏覽器支持Canvas,它將忽略<canvas>內部的HTML,如果瀏覽器不支持Canvas,它將顯示<canvas>內部的HTML:

<canvas id="test-stock" width="300" height="200">  <p>Current Price: 25.51</p></canvas>

在使用Canvas前,用canvas.getContext來測試瀏覽器是否支持Canvas:

<!-- HTML代碼 --><canvas id="test-canvas" width="200" heigth="100">  <p>你的瀏覽器不支持Canvas</p></canvas>
'use strict';var canvas = document.getElementById('test-canvas');if (canvas.getContext) {  alert('你的瀏覽器支持Canvas!');} else {  alert('你的瀏覽器不支持Canvas!');}

getContext('2d')方法讓我們拿到一個CanvasRenderingContext2D對象,所有的繪圖操作都需要通過這個對象完成。

var ctx = canvas.getContext('2d');

如果需要繪制3D怎么辦?HTML5還有一個WebGL規范,允許在Canvas中繪制3D圖形:

gl = canvas.getContext("webgl");

本節我們只專注于繪制2D圖形。

繪制形狀

我們可以在Canvas上繪制各種形狀。在繪制前,我們需要先了解一下Canvas的坐標系統:

Canvas的坐標以左上角為原點,水平向右為X軸,垂直向下為Y軸,以像素為單位,所以每個點都是非負整數。

CanvasRenderingContext2D對象有若干方法來繪制圖形:

'use strict';var  canvas = document.getElementById('test-shape-canvas'),ctx = canvas.getContext('2d');ctx.clearRect(0, 0, 200, 200); // 擦除(0,0)位置大小為200x200的矩形,擦除的意思是把該區域變為透明ctx.fillStyle = '#dddddd'; // 設置顏色ctx.fillRect(10, 10, 130, 130); // 把(10,10)位置大小為130x130的矩形涂色// 利用Path繪制復雜路徑:var path=new Path2D();path.arc(75, 75, 50, 0, Math.PI*2, true);path.moveTo(110,75);path.arc(75, 75, 35, 0, Math.PI, false);path.moveTo(65, 65);path.arc(60, 65, 5, 0, Math.PI*2, true);path.moveTo(95, 65);path.arc(90, 65, 5, 0, Math.PI*2, true);ctx.strokeStyle = '#0000ff';ctx.stroke(path);

繪制文本

繪制文本就是在指定的位置輸出文本,可以設置文本的字體、樣式、陰影等,與CSS完全一致:

'use strict';var  canvas = document.getElementById('test-text-canvas'),ctx = canvas.getContext('2d');ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.shadowOffsetX = 2;ctx.shadowOffsetY = 2;ctx.shadowBlur = 2;ctx.shadowColor = '#666666';ctx.font = '24px Arial';ctx.fillStyle = '#333333';ctx.fillText('帶陰影的文字', 20, 40);

Canvas除了能繪制基本的形狀和文本,還可以實現動畫、縮放、各種濾鏡和像素轉換等高級操作。如果要實現非常復雜的操作,考慮以下優化方案:

  1. 通過創建一個不可見的Canvas來繪圖,然后將最終繪制結果復制到頁面的可見Canvas中;
  2. 盡量使用整數坐標而不是浮點數;
  3. 可以創建多個重疊的Canvas繪制不同的層,而不是在一個Canvas中繪制非常復雜的圖;
  4. 背景圖片如果不變可以直接用<img>標簽并放到最底層。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新昌县| 东丽区| 永济市| 土默特右旗| 泌阳县| 旬邑县| 福鼎市| 白朗县| 澜沧| 卢湾区| 康乐县| 永定县| 曲阜市| 博湖县| 交口县| 贞丰县| 长沙市| 浦北县| 奉贤区| 乐清市| 威远县| 新余市| 马尔康县| 丰城市| 白银市| 如皋市| 余姚市| 瑞昌市| 太湖县| 原平市| 温州市| 罗城| 日照市| 海盐县| 武功县| 黑龙江省| 额敏县| 枞阳县| 淄博市| 思南县| 禄丰县|