最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年07月04日 10:16:33   作者:liaoxuefeng  
這篇文章主要介紹了JavaScript之Canvas,Canvas是HTML5新增的組件,它就像一塊幕布,可以用JavaScript在上面繪制各種圖表、動畫等

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

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

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

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

由于瀏覽器對HTML5標(biāo)準(zhǔn)支持不一致,所以,通常在<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的坐標(biāo)系統(tǒng):

Canvas的坐標(biāo)以左上角為原點,水平向右為X軸,垂直向下為Y軸,以像素為單位,所以每個點都是非負(fù)整數(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)橥该?
ctx.fillStyle = '#dddddd'; // 設(shè)置顏色
ctx.fillRect(10, 10, 130, 130); // 把(10,10)位置大小為130x130的矩形涂色
// 利用Path繪制復(fù)雜路徑:
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)非常復(fù)雜的操作,考慮以下優(yōu)化方案:

  1. 通過創(chuàng)建一個不可見的Canvas來繪圖,然后將最終繪制結(jié)果復(fù)制到頁面的可見Canvas中;
  2. 盡量使用整數(shù)坐標(biāo)而不是浮點數(shù);
  3. 可以創(chuàng)建多個重疊的Canvas繪制不同的層,而不是在一個Canvas中繪制非常復(fù)雜的圖;
  4. 背景圖片如果不變可以直接用<img>標(biāo)簽并放到最底層。

相關(guān)文章

  • js檢測IE8及以下瀏覽器版本并做出提示的函數(shù)代碼

    js檢測IE8及以下瀏覽器版本并做出提示的函數(shù)代碼

    這篇文章主要介紹了js檢測IE8及以下瀏覽器版本并做出提示的函數(shù)代碼,需要的朋友可以參考下
    2023-02-02
  • 小程序?qū)崿F(xiàn)帶年月選取效果的日歷

    小程序?qū)崿F(xiàn)帶年月選取效果的日歷

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)帶年月選取效果的日歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • layer提示框添加多個按鈕選擇的實例

    layer提示框添加多個按鈕選擇的實例

    今天小編就為大家分享一篇layer提示框添加多個按鈕選擇的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 提高網(wǎng)站性能之 如何對待JavaScript

    提高網(wǎng)站性能之 如何對待JavaScript

    在一個頁面中,每一個外部JavaScript 及CSS文件都會導(dǎo)致一個額外的HTTP請求。所以,如何合理的合并JavaScript 文件及CSS文件也是前端工程師應(yīng)該考慮的。
    2009-10-10
  • JavaScript制作年歷的示例代碼

    JavaScript制作年歷的示例代碼

    本文主要介紹了JavaScript制作年歷的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2012-05-05
  • document.all還是document.getElementsByName?

    document.all還是document.getElementsByName?

    document.all還是document.getElementsByName?...
    2006-07-07
  • 關(guān)于javascript解決閉包漏洞的一個問題詳解

    關(guān)于javascript解決閉包漏洞的一個問題詳解

    閉包在JavaScript高級程序設(shè)計(第3版)中是這樣描述:閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),下面這篇文章主要給大家介紹了關(guān)于javascript解決閉包漏洞的一個問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 微信小程序獲取當(dāng)前時間及星期幾的實例代碼

    微信小程序獲取當(dāng)前時間及星期幾的實例代碼

    這篇文章主要給大家介紹了關(guān)于利用微信小程序獲取當(dāng)前時間及星期幾的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    這篇文章主要介紹了小程序websocket心跳庫(websocket-heartbeat-miniprogram),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 類似CSDN圖片切換效果腳本

    類似CSDN圖片切換效果腳本

    原來的腳本當(dāng)只有一張圖片時會彈出JavaScript腳本錯誤,特此將自己修改完的版本貼出。
    2009-09-09

最新評論

兴宁市| 湖南省| 三穗县| 铁力市| 民县| 广灵县| 简阳市| 金阳县| 句容市| 康平县| 穆棱市| 凉山| 白银市| 固安县| 广元市| 竹山县| 安庆市| 兴和县| 丘北县| 新民市| 临高县| 韶关市| 安吉县| 商河县| 师宗县| 安阳市| 正定县| 宁国市| 漳州市| 凤凰县| 漠河县| 佛坪县| 紫阳县| 乐陵市| 永定县| 鄂温| 乐平市| 凤山县| 砚山县| 河间市| 日喀则市|