1. 程式人生 > >canvas基礎用法

canvas基礎用法

eve element 繼承 矩形區域 轉換 src 展示 當前位置 順時針

canvas 是 HTML5 提供的一個用於展示繪圖效果的標簽. canvas 原意畫布, 帆布. 在 HTML 頁面中用於展示繪圖效果. 最早 canvas 是蘋果提出的一個方案, 今天已經在大多數瀏覽器中實現.

  非零環繞原則:
    如果需要判斷某一個區域是否需要填充顏色. 就從該區域中隨機的選取一個點.
    從這個點拉一條直線出來, 一定要拉到圖形的外面. 此時以該點為圓心.
    看穿過拉出的直線的線段. 如果是順時針方向就記為 +1, 如果是 逆時針方向,
    就記為 -1. 最終看求和的結果. 如果是 0 就不填充. 如果是 非零 就填充.

       技術分享圖片

首先給 canvas設置寬高不能再樣式表裏設置,只能在行內中設置,這樣就不會失真,默認寬高是300,150

  ctx.moveTo :(x , y): 將繪制的起始點設置為x ,y
  ctx.lineTo : (x , y):從當前位置
  ctx.stroke():描邊繪圖,將坐標點連起來;
  ctx.fill():調用fill方法會將所有的點連接起來,並構成一個封閉的圖形結構,如果所有的描點沒有構成封閉結構,也會將開始的起點,與最終的點連接起來,構成一個閉合 的圖形,並填充顏色,默認黑色;
  ctx.beginPath():開啟新路徑;
  closePath( ):閉合路徑;
  ctx.strokeStyle= : 設置邊框顏色;
  ctx.fillStyle=:設置填充顏色;
  ctx.lineWidth=:設置線寬;
  ctx.lineCap=:設置線 末端 以什麽類型結束; butt(兩端使用方形結束) round(兩端末端添加圓形線帽) square (兩端末端添加正方形線帽)
  ctx . lineJoin=:設置相交線的拐點; ‘round‘ 使用圓角連接. bevel‘ 使用平切連接. ‘miter‘ 使用直角轉.

虛線:


  lineDashOffset = : 用於設置開始繪制虛線的偏移量. 數字的正負表示左右偏移;
  getLineDash( ) :獲取實虛線數組;
  setLineDash([ 5, 5 ] ) : 設置實線長度為5,虛線長度為5;

繪制矩形:
  Ctx . rect ( x , y , width , height ) : 只是描邊,必須要配合stroke()/ fill( ) 使用;
  Ctx . strokeRect (x , y , width , height) : 直接繪制正方形;
  Ctx . fillRect (x , y , width , height) : 繪制正方形並且填充默認黑色;
  Ctx . clearRect(x , y , width , height): 清除繪制的矩形;

清除畫布:

  Ctx . clearRect ( 0 , 0 , cas . width , cas . height ) :從畫布圓點開始,以畫布的高和寬進行清除;
  Cas . width = cas . width : 重新設置畫布的寬,相當於畫布被刷新了一次,也就被清空;

圓弧:
  ctx . arc(x , y , r , startAngle . endAngle , anticlockwise) 6個參數,前五必填;
      x , y 是圓心坐標;
       radius 表示圓弧半徑, 單位為弧度;
      startAngle 與 endAngle 表示開始到結束的角度,從 x 正軸為 0°, 順時針為正方向 .
      anticlockwise (方向正反):表示是否采用默認的正向角度, 如果傳入 true 表示逆指針為正 . 該參數可選.


弧度制:
  為了更好的計算角度,我們把角度提供一個新的定義,用 PI (π)作為單位,將單位圓的一個整圈(360度)記作 2 倍的 PI;
這樣的度量表示就是弧度制的表示方法;
  angel 角度;
  radian 弧度 ;


角度轉換為弧度:
  弧度 = 角度 / 180 * π π =180度 弧度 = 60度 / 180度 * π ;


弧度轉換為角度 :
  角度 = 弧度 * 180 / π 角度 =(π / 3) * 180 / π ;

計算圓弧上的點的坐標:
  x = x0 + r * Math . cos(a); x0為圓心x
  y = y0 + r * Math . sin(a); y0為圓心y

繪制文本:
  Ctx . fillText ( " 文字內容 ",x , y ) : 實心文字; x,y為文本的起始點坐標,但是是以文字的左下角為起始點坐標;
  Ctx . strokeText (“ 文本內容 ”, x , y): 描邊文字,鏤空的文字; x,y為文本的起始點坐標,但是是以文字的左下角為起始點坐標;
  Ctx . font():設置繪制字體的各種信息, 與 CSS 語法一致 , 設置字體形狀 , 樣式 , 字號粗細等 style | variant | weight | size/line-height | family.


文字對齊屬性:
  ctx . textAlign = : 水平對齊; left( 默認start ) / right(end) / center ; 以左下角的點為豎線,水平向左 / 右 / 中間對齊;
  Ctx . textBaseline = : 垂直對齊; bottom(默認) / middle(英文四條線上的第二條線) / top(懸掛在基線下) ; 以左下角的點為橫線, 垂直向上 / 中 / 下對齊;

   /alphabetic 表示字母參考線, ideographic 會比它低一點, hanging 表示懸掛. [ 對齊方式:可不記 ]


繪制圖片:
  [ 繪制圖片要等待圖片獲取到了之後再繪制,img.onload=function( ) { ctx.drawImage ( img, x , y ) } ]
    ctx . drawImage ( img, x , y ) : 將圖片繪制到x, y表示的位置去;
    ctx . drawImage ( img, x , y, width , height ) : 將圖片繪制到指定的矩形裏去;
    Ctx . drawImage ( img , sx , sy , sWidth , sHeight , dx , dy , dWidth , dHeight ):
    這裏的帶有 s 前綴的參數就是指圖源的矩形區域,將圖片的 ( 100, 100, 300, 200 ) 處的內容繪制到頁面的 ( 100, 100, 300, 200 ) 的位置.

變換:
  Ctx . scale ( ) : 該方法實現水平與垂直的縮放.
        參數 x 控制水平縮放倍率. 傳參 1 表示不作縮放, 傳入大於 1 的數字表示擴大.
        參數 y 控制垂直縮放倍率. 傳參 1 表示不作縮放, 傳入大於 1 的數字表示擴大;

  Ctx . translate( ) : 平移變換就是將原有坐標軸進行平行移動, 那麽坐標軸移動後就可以使用新坐標來繪制圖形了.

  Ctx . rotate( radian ) : 該方法將坐標軸進行旋轉變換.
         參數是弧度, 表示旋轉的方式. 正數表示順時針旋轉, 負數表示逆時針旋轉.

canvas狀態:
  Ctx . save(): 保存狀態,將畫的狀態封起來;
  Ctx.restore() : 恢復成開始的狀態,也就是再次beginPath( )開始之後,不會繼承上一次的圖形屬性效果;
  兩者要配合頭尾使用,才能避免繼承的問題;

Konva:
使用Konva的步驟
  1.需要引入Konva庫
  2.在頁面中放置一個div作為舞臺的容器(需要設置id屬性)
  3.使用Konva創建舞臺
    在Konva中Konva這個名字是一個命名空間,所有的構造函數都是它的成員
    例: var stage = new Konva . Stage(); Stage就是Konva的構造函數成員
  4.創建舞臺使用Konva.Stage
    參數必須有width, height, container

Stage : 舞臺, 類似html
  var stage =new Konva . Stage({
    width : 600, 寬為600,高為400的舞臺
    height : 400,
    container: ‘dv‘ 容器為div
  });


Layer : 層,類似body, 舞臺中要有層; var layer = new Konva . Layer ();


Rect : 矩形 var rect = new Konva . Rect({ 正方形的屬性 }); 類似div

add () : stage . add( Layer ) / layer . add ( rect ) 必須把層放在舞臺上, 再把元素放在層裏,就可以渲染出來;
    註意點: 先創建舞臺,再創建層,再繪制圖形,再將圖形添加到層中,再將層添加到舞臺中,千萬不能還沒繪制圖形,就先把層添加到舞臺上,而再去繪制圖形,不然添加的是個空圖層;

控制臺裏獲取x.y的坐標值: Element.x( ) Element.y( ) ;

canvas基礎用法