成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

原來 Canvas 也能直接繪制圓角矩形了

開發(fā) 前端
roundRect,顧名思義,就是圓角矩形,和rect[2]用法一致,只是參數(shù)上多了一個圓角radii。

很多時候,在使用 Canvas 繪制圓角矩形都是一件比較麻煩的事,因為之前并沒有直接的方法,只能通過直線和圓弧間接組合而成,下面是一個常規(guī)繪制方式。

ctx.beginPath();
ctx.moveTo(x + r, y);
ctx.arcTo(x + w, y, x + w, y + h, r);
ctx.arcTo(x + w, y + h, x, y + h, r);
ctx.arcTo(x, y + h, x, y, r);
ctx.arcTo(x, y, x + w, y, r);
ctx.closePath();

這里x、y、w、h、r分別代表x坐標、y坐標、寬度、高度、圓角。

這段代碼應該是最精簡的了,雖然不是特別復雜,但是應該很少有人能直接手寫,主要是不夠語義化,比較繁瑣。

而圓角矩形又是一個非常常見的功能需求,為此,Canvas 在Chrome 99悄悄推出了一個新的方法:roundRect()[1],花一分鐘了解一下。

一、roundRect 語法

roundRect,顧名思義,就是圓角矩形,和rect[2]用法一致,只是參數(shù)上多了一個圓角radii。

圖片

這里x、y、w、h就不介紹了,重點介紹一下這個圓角radii。

圓角radii有以下幾種取值

  • all-corners ,只有 1 一個值的時候,表示所有 4 個圓角
  • [all-corners],也可以是數(shù)組,當只有 1 一個值的時候,也表示 4 個圓角
  • [top-left-and-bottom-right, top-right-and-bottom-left],數(shù)組為 2 個值的時候,表示左上、右下圓角 和 右上、左下圓角
  • [top-left, top-right-and-bottom-left, bottom-right],數(shù)組為 3 個值的時候,表示左上圓角、右上、左下圓角 和 右下圓角
  • [top-left, top-right, bottom-right, bottom-left],數(shù)組為 4 個值的時候,表示左上圓角、右上圓角 、 右下圓角和左下圓角

看似麻煩,其實就是和 CSS 中的圓角規(guī)則是一致的,稍微看一眼就能明白

下面來看具體的效果

二、roundRect 案例及細節(jié)

首先來看一個值的,可以滿足絕大部分情況。

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
ctx.strokeStyle = 'red';
ctx.beginPath();
ctx.roundRect(20, 20, 150, 100, 10);
ctx.stroke();

效果如下:

圖片

當然這個值也是可以省略的,這樣就沒有圓角了,等同于rect

ctx.roundRect(20, 20, 150, 100);

效果如下:

圖片

再來看數(shù)組的情況,比如兩個值的,就像這樣。

ctx.roundRect(20, 150, 150, 100, [10, 40]);

效果如下:

圖片

再來看4個值的情況:

ctx.roundRect(200, 20, 150, 100, [0, 30, 50, 60]);

效果如下:

圖片

如果這個圓角非常大呢,超出了矩形的尺寸會怎么樣呢?

ctx.roundRect(200, 20, 150, 100, 300);

可以看到,這種情況也是完美適配,和 CSS 表現(xiàn)完全一致,變成了跑道形狀,效果如下:

圖片

還有需要注意的是,這個圓角不能為負數(shù),否則直接報錯。

圖片

完整代碼可以查看以下任意鏈接:

  • canvas roundRect (juejin.cn)[3]
  • canvas roundRect (codepen.io)[4]
  • canvas roundRect (runjs.work)[5]

三、兼容性和polyfill

這個方法還比較新,也就是今年初才推出的,兼容性還不是特別好,如下:

圖片

除了firefox,其他主流瀏覽器都已經(jīng)兼容。

當然也不用擔心,這個也是有polyfill的,如下:

??https://cdn.jsdelivr.net/gh/Kaiido/roundRect/roundRect.js??

其實實現(xiàn)上還是比較復雜的,考慮的情況非常多,各種臨界場景,參數(shù)的數(shù)量。這也是為什么推薦用原生 API 的原因的,語法容錯性太強了!

四、你記住了嗎

下次繪制圓角矩形就可以考慮這個方法了,至少心里有個備選方案,兼容性倒是其次,最后再來回顧一下:

圖片

圓角可以是一個數(shù)組,規(guī)則就參考 CSS 圓角規(guī)則就行了。

參考資料:

[1]roundRect(): https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/roundRect

[2]rect: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/rect

[3]canvas roundRect (juejin.cn): https://code.juejin.cn/pen/7178419723002970145

[4]canvas roundRect (codepen.io): https://codepen.io/xboxyan/pen/wvxwbWv

[5]canvas roundRect (runjs.work): https://runjs.work/projects/1ceee49205914def

責任編輯:武曉燕 來源: 前端偵探
相關推薦

2022-12-12 09:01:13

2010-09-02 17:31:42

VisualStudi微軟flash

2021-01-20 13:15:09

HTTPS加密網(wǎng)址

2025-01-09 13:30:00

2012-05-31 09:19:22

HTML5

2019-11-28 14:14:16

微信QQ騰訊

2021-02-26 10:43:59

Linux 開發(fā)操作系統(tǒng)

2020-12-22 09:34:20

JavaScript開發(fā)技術

2020-12-28 13:43:03

MacWindowsSurface

2024-04-30 08:22:51

Figma圖形編輯變換矩陣

2024-02-06 09:30:25

Figma矩形矩形物理屬性

2009-01-18 09:19:00

DHCPVlANIP

2021-07-08 11:47:02

Saleor開源電子商務平臺

2013-09-26 14:09:31

iOS開發(fā)OpenGL ES教程繪制矩形

2022-09-16 15:34:32

CanvasArkUI

2024-04-22 09:12:36

CSSflexgrid

2010-08-02 13:55:20

2020-10-23 10:46:03

緩存雪崩擊穿

2016-11-24 12:07:42

Android萬能圓角ImageView

2023-01-16 08:11:49

Edge瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久免费桃花 | 日韩美女在线看免费观看 | 国产精品一区二区三区久久 | 成人精品久久 | 亚洲精品国产成人 | 免费一级片 | 欧美精品久久久久久 | 日韩免费av网站 | .国产精品成人自产拍在线观看6 | 亚洲国产成人av | 亚洲精选久久 | 国产伦一区二区三区四区 | 亚洲第一视频网 | 久久伊人一区 | 国产女人叫床高潮大片免费 | 九九热免费视频在线观看 | 亚洲欧美自拍偷拍视频 | 欧美成人精品激情在线观看 | 欧美日韩一本 | 成人在线视频网 | 免费一区 | 久久9999久久 | 国产剧情一区 | 国产精品视频一区二区三区不卡 | 国产亚洲一区二区三区 | 国产午夜视频 | 精品欧美色视频网站在线观看 | 国产精品激情小视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 一区二区三区在线免费观看视频 | 久久精品久久久久久 | 欧美人人| 久久久精品一区二区三区 | 亚洲一区二区三区四区五区中文 | 亚洲精品乱码久久久久久9色 | 久久久久久蜜桃一区二区 | 91精品麻豆日日躁夜夜躁 | 九一在线观看 | 亚洲系列第一页 | 国产精品日韩在线观看 | 精品中文在线 |