JavaScriptのprototypeをつかったオブジェクト指向サンプルソース

セレクトボックスで選択した値に応じて特定要素の表示を切り替える11行のJavaScriptを
prototypeを使ったオブジェクト指向の組み方などでがっちりかためてみたサンプルです。

$(function(){
	var ui_selecter = $('select[data-script*="visible-selector"][data-target]');
	if(ui_selecter[0]) ui_selecter.each(function(i, o) {
		if($($(o).attr('data-target'))[0]) $(o).on('change', function() {
			var current = $(this).find('option[data-id]:selected'),
				$target = $($(o).attr('data-target')).find('[data-id="' + current.attr('data-id') + '"]');
			if($target[0]) $target.show().siblings('[data-id]').hide();
		});
		$(o).trigger('change');
	});
});

See the Pen visible selector by webdev (@webdev-jp-net) on CodePen.0

SVGにwidth,heightを指定していないとIEでbackground-sizeより縮小されるバグ

IE11では、レスポンシブ対応のためwidth,heightを指定していないSVG画像をbackgroundに指定した際
画像がbackground-sizeで指定したサイズよりも小さく表示されてしまうバグがあります。

これを回避するためには、SVGにwidth,heightを指定した上で、CSSのbackground-sizeも指定します。

サンプルソース※IEで表示すると症状が再現します

.pattern {
	width: 100vw;
	height: 10vw;
	background: url('dot.svg');
	background-size: 5vw;
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60">
	<circle cx="0" cy="0" r="12"/>
	<circle cx="30" cy="30" r="12"/>
	<circle cx="60" cy="60" r="12"/>
	<circle cx="0" cy="60" r="12"/>
	<circle cx="60" cy="0" r="12"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="60px" height="60px" viewBox="0 0 60 60">
	<circle cx="0" cy="0" r="12"/>
	<circle cx="30" cy="30" r="12"/>
	<circle cx="60" cy="60" r="12"/>
	<circle cx="0" cy="60" r="12"/>
	<circle cx="60" cy="0" r="12"/>
</svg>

SVGをグラデーションで塗りつぶす

Illustratorでグラデーションで塗りつぶしたベクター画像をSVG書き出しすると、
わざわざグラデーション部分をラスタライズ画像として保存しマスキングする構造のSVGを生成してくれます。
せっかくビットマップ画像と決別したかったのにこれでは煮え切らない (笑)
ということでXMLコードだけでfillをグラデーションにする方法を探しました。

“SVGをグラデーションで塗りつぶす” の続きを読む

線分の角度を取得するJavaScript

javascriptで線分の角度を取得します。

Math.atan2 でラジアン単位の角度を取得してから度数法に変換しています。

var redian = Math.atan2((終点Y座標 - 始点Y座標), (終点X座標 - 始点X座標));
var angle = redian * (180 / Math.PI); // ラジアンを度数へ変換

See the Pen Get angle of line segment by webdev (@webdev-jp-net) on CodePen.0

Vue.js の イベント装飾子で preventDefault と stopPropagation

Vue.js 2では、テンプレートでイベント装飾子を使うと簡単にpreventDefaultやstopPropagationを定義できます。

参考:
イベントハンドリング – Vue.js

event.preventDefault -> .prevent

<a href="#" @click.prevent="ファンクション">link</a>

event.stopPropagation -> .stop

<a href="#" @click.stop="ファンクション">link</a>

重ね付け

<a href="#" @click.prevent.stop="ファンクション">link</a>

サンプル

formの枠をクリックで背景色が点滅
リンク先の設定してあるリンクにclickイベントを付与し、.preventと.stopのサンプル
actionでURLが設定してあるformのbuttonにclickイベントを付与し、.preventと.stopのサンプル

See the Pen Vue.js event modifier by webdev (@webdev-jp-net) on CodePen.0