對於canvas的繪製,首先需要在html內指定一塊畫布,即, 可以看做是在ps中新建乙個空白文件,之後所有的操作都將呈現在這個文件之上,與ps的區別是,canvas本身沒有圖層的特性,當需要展示不同維度的檢視時,需要交由html的位置關係來解決。
canvas標籤上,值得一提的就是width和height兩個屬性,這兩個屬性代表著畫布的寬高,與canvas樣式上的寬高有很大區別。在瀏覽器當中,看到的圖形繪製大小,本身是由canvas.style.width/canvas.style.height決定的,他們決定了canvas這個dom元素的大小關係,而canvas.width和canvas.height決定的是canvas內部圖形的大小關係。當這兩個寬高比不同時,就會產生視覺上的形變。即,把canvas.style.height放大為2倍時,顯示效果會被拉伸:
當不設定樣式寬高時,瀏覽器中canvas大小由畫布大小決定(在實際開發中,碰到乙個例外,是在使用mapbox時,繪製map的標籤如果只設定canvas畫布大小時,在ios移動端的瀏覽器上顯示異常,pc正常)。
所謂上下文,代表的就是乙個環境,在這個環境當中你可以獲取到相關的方法,變數。程式中有上下文,html的**中也有上下文,比如音訊上下文(audiocontext),只有拿到了上下文,才能進行相關的方法操作,canvas也是如此,canvas上的方法都是借由canvas上下文得到。
const canvasl = document.getelementbyid("leftcanvas");
const cxtl = canvasl.getcontext("2d");
本次圓弧動畫需要用到的上下文屬性有:
角度計算之前,先介紹一下繪製圓弧的基礎apiarc。
ctx.arc(x, y, radius, startangle, endangle [, anticlockwise]);
這個函式可以接收6個引數,前五個為必填,分別為圓心x座標,圓心y座標,半徑,起始角度,結束角度,方向(預設為false,順時針)。回到圓弧動畫,當前動畫有兩段,以順時針方向這段為例。
順時針方向圓弧初始配置為:
cxtl.arc(widthl / 2, heightl / 2, widthl / 2 - 5, -1 / 2 * math.pi, 1 / 6 * math.pi, false);
window.requestanimationframe()
借助requestanimationframe,來對canvas圓弧進行不斷的重繪,每次重繪canvas之前清空畫布,每輪動畫方向角偏移2°,即2 / 180 * math.pi,動畫結束的標記為圓弧終點的角度,移動至3 / 2 * math.pi,當滿足條件時,呼叫window.cancelanimationframe(animationid)取消動畫。
通過進入html後,動態獲取視口,來設定canvas寬高,比如希望畫布大小為視窗的寬度的15%,可以通過
const clientwidth = document.documentelement.clientwidth;
const canvaswidth = math.floor(clientwidth * 0.15);
const canvasl = document.getelementbyid("leftcanvas");
canvasl.setattribute("width", canvaswidth + "px");
這樣就可以使畫布適應不同螢幕大小。 canvas 繪製圓弧
處理資料 let plan let zhanxian let chengjiao let x 200 let y 200 data.foreach d,i let datas zhanxian,chengjiao datas迴圈 datas.foreach arr,m else function d...
16 canvas繪製圓弧
1 doctype html 2 html lang en 3 head 4 meta charset utf 8 5 title 16 canvas繪製圓弧 title 6 style 7 11canvas 16style 17head 18 body 19 canvas width 500 he...
使用Canvas繪製旋轉動畫
在使用canvas繪製旋轉動畫時我們會遇到乙個問題 使用context.rotate 是將畫布進行旋轉,而並不是畫布上的繪製的圖形,那我們要怎樣做才能使畫布上圖形旋轉呢?假設現在已經寫好了頁面,定義了canvas元素,下邊列出js 1.建立畫布 var context elem.getcontext...