6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CSS Painting APIをとりあえず試してみた

Last updated at Posted at 2018-07-30

CSS Paint API

CSS Paint API(CSS Painting API)とはWEBブラウザがCSSで行っている描画処理の一部をJavaScriptで記述することができるものです。
詳細がよくわからないですが、canvas要素で頑張っていたことをもう少しスマートにかけるようになる?

とりあえず試す

Workerの一種のPaintWorkletが必要となる。

worklet.js

class CirclePainter {
	static get inputProperties() {
		return ['--circle-color'];
	}
 
	paint(context, size, properties) {
		const color = properties.get('--circle-color').toString();
		context.fillStyle = color;
 
		const centerX = size.width / 2;
		const centerY = size.height / 2;
  
		context.arc(centerX, centerY, 50, 0, Math.PI * 2);
		context.fill();
	}
}
registerPaint('circle', CirclePainter);

registerPaint('circle', CirclePainter);
最後の箇所のregisterPaintで任意の名前('circle')で呼び出せるように登録しています。

sample.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>CSS Paint API</title>
	<style>
		.target {
			width: 500px;
			height: 500px;
			--circle-color: blue; /* JSへの受け渡し変数 */
			background-image: paint(circle); /* ここで呼び出し */
		}
	</style>
</head>
<body>
	<div class="target"></div>
	<script>
		// workletを登録する
		CSS.paintWorklet.addModule('worklet.js');
 	</script>
</body>
</html>

CSSから利用できるように、CSS.paintWorklet.addModuleでwokletを登録しています。

background-image: paint(circle);
そうすることにより、CSS内のbackground-imageで利用できます。

まだ、利用シーン等イメージはついていませんが、描画周りも日々進化していますね。
今後なにかに利用出来るかもということでメモがわりとして残します。

##参考
https://developers.google.com/web/updates/2018/01/paintapi

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?