1. 程式人生 > >HTML5 Canvas 繪製橢圓與橢圓弧的實現

HTML5 Canvas 繪製橢圓與橢圓弧的實現

由於HTML Canvas 2D Context標準中並沒有直接繪製橢圓與橢圓弧的方法,所以瀏覽器普遍沒有這個方法,不過,Chrome支援ellipse方法,至於從哪個版本開始支援的,我就未查證了。IE11,Edge, Firefox, Safari目前最新版都還不支援。。。


所以,我們需要用JS來實現這個方法。原理就是用已經支援的其它方法來模擬ellipse方法,可以用lineTo, quadraticCurveTo, bezierCurveTo, arcTo, arc等方法來實現。


用lineTo來模擬的話,就是引數方程的形式,計算出橢圓上的點的座標,逐點用lineTo繪製模擬橢圓。簡單粗暴有效。


用quadraticCurveTo, bezierCurveTo是一種近似模擬,用貝塞爾曲線來擬合橢圓或橢圓弧,關鍵在於計算合適的控制點。有些特定場景下很適合。


用arcTo, arc來實現也比較簡單,不需要複雜計算,由於arcTo, arc只提供了繪製正圓弧的功能,要繪製橢圓弧,配合scale變形就可以了。推薦使用該方法。實現程式碼如下:

if (CanvasRenderingContext2D.prototype.ellipse == undefined) {
  CanvasRenderingContext2D.prototype.ellipse = function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {
    this.save();
    this.translate(x, y);
    this.rotate(rotation);
    this.scale(radiusX, radiusY);
    this.arc(0, 0, 1, startAngle, endAngle, antiClockwise);
    this.restore();
  }
}

使用示例:

//
var canvas = document.getElementById("canvas1"),
    ctx = canvas.getContext('2d');
//....
ctx.moveTo(100,200);
ctx.ellipse(300, 200, 100, 60, 0, 0, Math.PI, true);
ctx.stroke();
ellipse方法各引數的含義:

x, 橢圓圓心X座標

y, 橢圓圓心Y座標

radiusX, 長半軸長度

radiusY, 長半軸長度

rotation, 橢圓旋轉角度 (單位是度不是弧度)

startAngle, 橢圓弧起始角弧度 (單位是弧度不是度!)

endAngle, 橢圓弧結束角弧度 (單位是弧度不是度!)

antiClockwise, 是否是逆時針方向繪製。true表示逆時針方向繪製橢圓弧,false順時針方向繪製橢圓弧。


至於為什麼一個方法內驚現 2 種角度單位,我只能說:前端標準就是這麼亂!

Google出品的 canvas-5-polyfill.js 用於增強canvas相容性,它也給canvas加上了ellipse方法

相關推薦

HTML5 Canvas 繪製橢圓圓弧實現

由於HTML Canvas 2D Context標準中並沒有直接繪製橢圓與橢圓弧的方法,所以瀏覽器普遍沒有這個方法,不過,Chrome支援ellipse方法,至於從哪個版本開始支援的,我就未查證了。IE11,Edge, Firefox, Safari目前最新版都還不支援。

html5 canvas繪製圓形印章,以及頁面互動

來源:https://www.cnblogs.com/hello-word1/p/5137626.html <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF

Html5 Canvas動畫基礎碰撞檢測的實現

在Canvas中進行碰撞檢測,大家往往直接採用遊戲引擎(Cocos2d-JS、Egret)或物理引擎(Box2D)內建的碰撞檢測功能,好奇的你有思考過它們的內部執行機制嗎?下面將針對基本的碰撞檢測技術進行講解: 1、基於矩形的碰撞檢測 所謂碰撞檢測就是判斷物體間是否發生重疊,這裡我們假設討論的碰撞體都是矩

HTML5+Canvas+jQuery呼叫手機拍照功能實現圖片上傳(二)

上一篇只講到前臺操作,這篇專門涉及到Java後臺處理,前臺通過Ajax提交將Base64編碼過的圖片資料資訊傳到Java後臺,然後Java這邊進行接收處理,通過對圖片資料資訊進行Base64解碼,之後使用流將圖片資料資訊上傳至伺服器進行儲存,並且將圖片的路徑地址存進資料庫。

通過html5 canvas繪製時鐘

最近一直在學習html5,學到了html5的canvas標籤,這個畫布真的是很強大,它有對應的javascript的api的支援,你可以在這個標籤裡面繪製任意的圖形,你也可以把圖片放在裡面,能夠做出很炫的效果。 言歸正傳,廢話不多說,首先,html,只一句

HTML5 Canvas繪製的圖形的事件處理

DOM是Web前端領域非常重要的組成部分,不僅在處理HTML元素時會用到DOM,圖形程式設計也同樣會用到。比如SVG繪圖,各種圖形都是以DOM節點的形式插入到頁面中,這就意味著可以使用DOM方法對圖形進行操作。比如有一個<path id="p1">元素,可以直

HTML5 canvas 繪製圓形

canvas繪製圓形的思路: 1、建立路徑 XXX.beginpath(); 2、建立圓形的路徑; 3、關閉路徑;XXX.closepath(); 路徑不關閉也能繪製出圖形 4、設定繪製樣式。 建立圓形路徑時需要用到物件的arc方法,方法定義如:XXX.arc(x,y,r

HTML5 canvas 繪製的文字如何換行?

HTML5 裡的 canvas 元素是一個圖形容器,我們可以通過 JavaScript 來控制它繪製各種文字和影象。 在使用 canvas 繪製某字串的時候,我們可能想要讓該字串在某處按要求換行。 這該怎麼實現呢? 你是不是想到了 JavaScript 裡

Html5 canvas 繪製彩票走勢圖

因需要 要實現一個類似彩票走勢圖的功能,初次學Html5 ,很多地方不明白,前段時間也發帖請教過這個問題,也是沒給個明確說話,在網上搜了很多,也沒有實現的例子,今天仔細研究了下,發現其實也不是很難,現將程式碼貼出來,共同學習! 先來一張效果圖: 實現的程式碼: <!

HTML5 canvas電子簽名截圖

一:效果圖 二:頁面程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l

HTML5 Canvas SVG路徑KineticJS世界地圖,夠有意思!

這個實驗證明了SVG路徑功能的KineticJS通過生成一個互動式地圖從一個SVG資料來源。 產品說明:滑鼠懸停在這個國家 <!DOCTYPE HTML> <html> <head> <style> b

HTML5 Canvas繪製環形進度條

最近比較迷戀canvas,加之做了一個個人網站,有用到環形進度條,記錄下來。 canvas中沒有直接繪製圓的方法,但有一個繪製弧線的context.arc方法,  下面講下用該方法如何繪製出圖片效果。 arc()方法介紹 context.arc(x,y,r,s

第一講:使用html5——canvas繪製奧運五環

<html> <head> <title>初識canvas</title> </head> <body> <canvas id="mc" width="400px" height

基於HTML5 Canvas繪製的支援手勢縮放的室內地圖

你是否有過這樣的經歷,在大型的商圈、商場中傻傻找不到路。嗯,室內地圖就這樣應運而生了。百度地圖、高德地圖等都提供了室內地圖的功能,高德地圖最近還把室內地圖的API開放了。室內地圖的導航、定位功能一定是未來幾年非常有前途的一件事。本文提供了一種基於HTML5

arcgis api for js入門開發系列二十一 用HTML5 canvas繪製地圖 瓦片載入平移縮放

  終於開始可以寫程式碼了,手都開始癢了。這裡的程式碼僅僅是在chrome檢測過,我可以肯定的是IE10以下瀏覽器是行不通,我一直在考慮,是不是使用IE禁止看我的篇部落格,就是這群使用IE的人,給我加了很多工作量。     一個地圖的基本動作,無非就是載入資料,

html5 canvas 繪製橫線豎線時不清晰的解決辦法

在繪製一個Tip模樣的圖案時遇到了令人鬱悶的事情:當lineHeight為1時,斜線都很清晰,唯獨橫線和豎線不清晰,目測佔了兩個畫素,而且透明度都被減半;如圖: ,後來經過查資料,終於知道,畫布上的座標並未對應網頁裡的畫素,假如我們要在10,10這個點畫橫線到100,10,

html5 canvas 繪製曲線圖

程式碼: <!Doctype Html> <html> <head> <title>Line Chart Demo</title> <meta http-equiv="Content-T

canvas繪製圖形——圓弧圓形

canvas 繪製圓弧 繪製圓弧使用 context.arc( ) 函式,包含六個引數。 context.arc( centerx,centery,radius, startingAngle,endingAngle, anticlockwise = false )

HTML5 Canvas繪製橢圓的幾種方法

1.canvas自帶的繪製橢圓的方法 ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)是後來新增的, 引數的意思:(起點x.起點y,半徑x,半徑y,旋轉的角度,起始角,結果角,順時針還是逆時針)

HTML5 canvas實現圖片拉伸、壓縮裁剪

前言: 我們在網頁中經常會用到圖片展示,通常情況下會給一個固定的寬高來顯示這個圖片,然而從伺服器端上傳的圖片大小是不確定的,如果直接按預設填充這個框有時候就會特別醜orz。作為一個完(wai)美(mao)主(xie)義(hui)者,讓圖片們儘可能優美