1. 程式人生 > >HTML5簡明教程-1.1.1.HTML5Canvas參考手冊 之 填充fillStyle

HTML5簡明教程-1.1.1.HTML5Canvas參考手冊 之 填充fillStyle

之前寫過一篇關於HTML5canvas的博文,泛泛介紹了canvas的相關功能。今早翻看w3cschool才發現,canvas相關知識還有很多。在接下來的先關文章中會對canvas做進一步學習與總結,做一個備查手冊。

屬性名:fillStyle

屬性描述:fillStyle 屬性設定或返回用於填充繪畫的顏色、漸變或模式。

屬性預設值:#000000

屬性值:color|gradient|pattern

屬性值詳解:

(1)color。與普通樣式的顏色定義相同,可以用類似於red、green等英文單詞,可以用#000000這樣的顏色值,也可以用rgba()定義顏色或透明度。如下程式碼:

    //單色填充
    cC.fillStyle = 'red';
    cC.fillRect(0, 0, 200, 200);
    
    //rgba填充
    cC.fillStyle = 'rgba(0,0,255,0.5)';
    cC.fillRect(210, 0, 200, 200);

(2)gradient。gradient指又createLinearGradient()或createRadialGradient()建立的物件,分別實現線性漸變和放射漸變。方法在此不做詳細介紹,以後會專門總結。程式碼如下:
    //線性漸變填充
    //獲得漸變範圍,引數:(起點X軸座標,起點Y軸座標,終點X軸座標,終點Y軸座標)
    var lg = cC.createLinearGradient(0, 210, 200, 200);
    lg.addColorStop(0, 'green');
    lg.addColorStop(0.5, 'red');
    lg.addColorStop(1, 'yellow');
    cC.fillStyle = lg;
    cC.fillRect(0, 210, 200, 200);

    //放射漸變填充
    //獲得漸變範圍,引數:(漸變的開始圓的 x 座標,漸變的開始圓的 y 座標,開始圓的半徑,漸變的結束圓的 x 座標,漸變的結束圓的 y 座標,結束圓的半徑)
    var rg = cC.createRadialGradient(370, 370, 50, 370, 370, 170);
    rg.addColorStop(0, 'red');
    rg.addColorStop(0.5, 'green');
    rg.addColorStop(1, 'yellow');
    cC.fillStyle = rg;
    cC.fillRect(210, 210, 200, 200);

(3)pattern。pattern指由createPattern()方法建立的物件,該物件與ps中的物件填充相似,都是用已有物件內容填充相關區域。此處我們用img建立填充物件,仍會存在瀏覽器相容性問題,所以在影象載入完成後才進行繪製,以解決相容性問題。程式碼如下:
    //pattern物件填充
    //用圖片做填充時仍會存在瀏覽器相容性的問題,需要在圖片載入完成後進行繪製,否則將無法繪製
    var img = document.getElementById('img');
    img.onload = function() {
        //createPattern()方法的第二個引數定義了第一個物件的重複方式,與背景圖片的重複方式一致,有如下方式:
        //repeat:x軸與y軸都重複
        //repeat-x:僅重複x軸
        //repeat-y:僅重複y軸
        //no-repeat:不重複,僅顯示一次
        var p = cC.createPattern(img, 'repeat');
        cC.fillStyle = p;
        cC.fillRect(0, 400, 400, 400);
        cC.fill();
    };
fillStyle的基本內容也就這些,下面是我測試用到的程式碼:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Html5 Canvas</title>
</head>

<body>
    <canvas id="can" width="400" height="800"></canvas>
    原圖:
    <img src="resources/images/1.jpg" alt="" id="img">
</body>

<script type="text/javascript">
    //獲得頁面元素
    var c = document.getElementById('can');
    //呼叫html5相關方法獲得2D物件
    var cC = c.getContext('2d');

    //單色填充
    cC.fillStyle = 'red';
    cC.fillRect(0, 0, 200, 200);
    
    //rgba填充
    cC.fillStyle = 'rgba(0,0,255,0.5)';
    cC.fillRect(210, 0, 200, 200);

    //線性漸變填充
    //獲得漸變範圍,引數:(起點X軸座標,起點Y軸座標,終點X軸座標,終點Y軸座標)
    var lg = cC.createLinearGradient(0, 210, 200, 200);
    lg.addColorStop(0, 'green');
    lg.addColorStop(0.5, 'red');
    lg.addColorStop(1, 'yellow');
    cC.fillStyle = lg;
    cC.fillRect(0, 210, 200, 200);

    //放射漸變填充
    //獲得漸變範圍,引數:(漸變的開始圓的 x 座標,漸變的開始圓的 y 座標,開始圓的半徑,漸變的結束圓的 x 座標,漸變的結束圓的 y 座標,結束圓的半徑)
    var rg = cC.createRadialGradient(370, 370, 50, 370, 370, 170);
    rg.addColorStop(0, 'red');
    rg.addColorStop(0.5, 'green');
    rg.addColorStop(1, 'yellow');
    cC.fillStyle = rg;
    cC.fillRect(210, 210, 200, 200);

    //pattern物件填充
    //用圖片做填充時仍會存在瀏覽器相容性的問題,需要在圖片載入完成後進行繪製,否則將無法繪製
    var img = document.getElementById('img');
    img.onload = function() {
        //createPattern()方法的第二個引數定義了第一個物件的重複方式,與背景圖片的重複方式一致,有如下方式:
        //repeat:x軸與y軸都重複
        //repeat-x:僅重複x軸
        //repeat-y:僅重複y軸
        //no-repeat:不重複,僅顯示一次
        var p = cC.createPattern(img, 'repeat');
        cC.fillStyle = p;
        cC.fillRect(0, 400, 400, 400);
        cC.fill();
    };
</script>

</html>
最終效果如下圖:

轉載請註明出處