WEBOPIXEL

リストのアイコンをcanvasで作ってみた

Posted: 2011.07.13 / Category: HTML&CSS, javascript / Tag: ,

html5のcanvasを使えば色々できるみたいですが、リストとかのアイコンをcanvasで描いてしまうのはどうなんだろ。ということでやってみました。

Sponsored Link

つまらないものですが申し訳ないですが、今回はおもいきってjsdo.itというサイトに登録してみました。すごく便利ですね!

html

この通り何のへんてつもないリストがあります。
canvasタグはjQueryで追加します。

html

 
	<ul class="icon">
		<li>item01</li>
		<li>item02</li>
		<li>item03</li>
		<li>item04</li>
		<li>item05</li>
	</ul>
	

css

リストの画像は普通cssの背景画像で指定しますが、背景画像にcanvasはたぶん指定できませんので、liの直下にcanvasを入れます。
細かい調整はcanvasのtopやleftで修正してください。

css

 
	ul.icon {
		list-style: none;
	}
	ul.icon li {
		position: relative;
		margin-bottom: 0.5em;
	}
	ul.icon li canvas {
		position: absolute;
		top: 0.3em;
		left: -13px;
	}
	

JavaScript

要素の取得とかにjQueryを使用しております。

javascript

 
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
	<script type="text/javascript">
	$(function() {
		var list = $('ul.icon li');
		list.prepend('<canvas width="20" height="20" />');
		var ctx = null;
		
		list.each(function (i) {
			var canvas = $('canvas', list).get(i);
			ctx = canvas.getContext('2d');
			drawIcon();
		});
		
		/* アイコン描画
		================ */
		function drawIcon() {
			//丸
			ctx.beginPath();
			ctx.arc(6, 10, 6, 0, Math.PI*2);
			ctx.fillStyle = 'rgb(50, 150, 255)';
			ctx.fill();
			//三角
			ctx.beginPath();
			ctx.moveTo(5, 7);
			ctx.lineTo(8, 9);
			ctx.lineTo(5, 12);
			ctx.closePath();
			ctx.fillStyle = 'rgb(255, 255, 255)';
			ctx.fill();
		}
	});
	</script>
	

アイコンを描いているのは16行目あたりの「drawIcon」ですので、ここをカスタマイズすることでオリジナルのアイコンにできます。