麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript之Canvas_動力節(jié)點Java學院整理

2019-11-19 16:11:01
字體:
供稿:網(wǎng)友

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

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

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

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

由于瀏覽器對HTML5標準支持不一致,所以,通常在<canvas>內(nèi)部添加一些說明性HTML代碼,如果瀏覽器支持Canvas,它將忽略<canvas>內(nèi)部的HTML,如果瀏覽器不支持Canvas,它將顯示<canvas>內(nèi)部的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規(guī)范,允許在Canvas中繪制3D圖形:

gl = canvas.getContext("webgl");

本節(jié)我們只專注于繪制2D圖形。

繪制形狀

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

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

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

'use strict';var  canvas = document.getElementById('test-shape-canvas'),ctx = canvas.getContext('2d');ctx.clearRect(0, 0, 200, 200); // 擦除(0,0)位置大小為200x200的矩形,擦除的意思是把該區(qū)域變?yōu)橥该鱟tx.fillStyle = '#dddddd'; // 設(shè)置顏色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);

繪制文本

繪制文本就是在指定的位置輸出文本,可以設(shè)置文本的字體、樣式、陰影等,與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除了能繪制基本的形狀和文本,還可以實現(xiàn)動畫、縮放、各種濾鏡和像素轉(zhuǎn)換等高級操作。如果要實現(xiàn)非常復雜的操作,考慮以下優(yōu)化方案:

  1. 通過創(chuàng)建一個不可見的Canvas來繪圖,然后將最終繪制結(jié)果復制到頁面的可見Canvas中;
  2. 盡量使用整數(shù)坐標而不是浮點數(shù);
  3. 可以創(chuàng)建多個重疊的Canvas繪制不同的層,而不是在一個Canvas中繪制非常復雜的圖;
  4. 背景圖片如果不變可以直接用<img>標簽并放到最底層。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 啪啪毛片| 特一级毛片 | 国产91精品久久久久久 | 国产精品91久久久 | 黄色网址免费在线 | 中文字幕在线观看免费 | 91精品动漫在线观看 | 中文在线国产 | 福利在线小视频 | 日本免费一区二区三区四区 | 日韩视频1 | 视频一区二区三区免费观看 | 亚洲九九爱 | 国产高潮失禁喷水爽到抽搐视频 | 激情小说激情电影 | 操毛片| 一级做a爰片性色毛片2021 | 亚洲九九色 | 久久艹精品 | 午夜精品老牛av一区二区三区 | 91九色蝌蚪国产 | 国产在线精品一区二区三区 | 久久午夜国产 | 亚洲欧美国产高清 | 欧美性生活网站 | 日本欧美一区二区 | 午夜天堂在线 | 日韩大片在线永久观看视频网站免费 | 欧美黄色一级片在线观看 | 国产精品久久久久久久娇妻 | 精品国产一区二区三区四区阿崩 | 麻豆视频在线免费观看 | 青青操精品| 欧美大胆xxxx肉体摄影 | 91精品久久久久久 | 久久精品女人天堂av | 蜜桃视频在线观看视频 | 国产精品久久久在线观看 | 一色桃子av大全在线播放 | 日日爱99 | 日日鲁夜夜视频热线播放 |