「Shoelace」でQRコードを生成する方法
QRコードは広く利用されていますが、自分自身生成できたら便利ですよね。
今回は「Shoelace」でQRコードを生成する方法を紹介します。
Contents
「Shoelace」でQRコードを生成する方法
タグ「<sl-qr-code>」
タグ「<sl-qr-code>」を利用すると、QRコードを表示できます。
<sl-qr-code value="https://shoelace.style/"></sl-qr-code>
タグ「sl-qr-code」の『value』にQRコードを読み取った後、出力される文字列を定義することで、QRコードを生成することがd系ます。
ここでは、読み取った後の文字列が『https://shoelace.style/』となっています。
導入方法
「Shoelace」の全機能を利用する必要はなく、QRコードだけ生成/表示させたい場合には、QRコードのJSファイル(qr-code.js)だけ読む込むだけで利用できます。
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.1.0/dist/components/qr-code/qr-code.js"></script>
なお、全機能を利用したい場合には、CDNで「Shoelace」全体のライブラリを読み込んでください。
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0/dist/themes/light.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0/dist/shoelace.js"></script>
サンプル
HTMLコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Shoelace QR Code demo(1)</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0/dist/themes/light.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0/dist/shoelace.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0/dist/translations/ja.js"></script>
<style>
body {
opacity: 0;
}
body.ready {
opacity: 1;
transition: 0.25s opacity;
}
</style>
</head>
<body>
<div class="qr-overview">
<sl-qr-code value="https://shoelace.style/" label="QRコードをスキャンすれば、Shoelaceのウェブサイトがわかります"></sl-qr-code>
<br />
<sl-input maxlength="255" clearable label="文字列"></sl-input>
<sl-input maxlength="3" label="サイズ" value="128"></sl-input>
<sl-button onclick="saveQR();">保存する</sl-button>
</div>
<script type="module">
// ロードし終わってから表示
document.body.classList.add('ready');
const container = document.querySelector('.qr-overview');
const qrCode = container.querySelector('sl-qr-code');
const input = container.querySelector('sl-input[label="文字列"');
const size = container.querySelector('sl-input[label="サイズ"');
// 初回初期値設定
input.value = qrCode.value;
qrCode.size = size.value;
// 「sl-input」(入力完了イベントでQRコード生成);QRコード再生成
input.addEventListener('sl-input', () => (qrCode.value = input.value));
// 「sl-input」(入力完了イベントでQRコード生成):サイズ再設定
size.addEventListener('sl-input', () => (qrCode.size = size.value));
</script>
<script >
// QRコード保存処理
function saveQR() {
const qrCode = document.querySelector('sl-qr-code');
const a = document.createElement("a");
a.href = qrCode.canvas.toDataURL("image/png", 0.92); // PNGなら"image/png"
a.download = "qrcode.png";
a.click();
}
</script>
<style>
.qr-overview {
max-width: 256px;
}
.qr-overview sl-input {
margin-top: 1rem;
}
</style>
</body>
</html>
デモ
動的にQRコードを生成する方法
<script type="module">
const container = document.querySelector('.qr-overview');
const qrCode = container.querySelector('sl-qr-code');
const input = container.querySelector('sl-input');
// 初回初期値設定
input.value = qrCode.value;
// 「sl-input」(入力完了イベントでQRコード生成)
input.addEventListener('sl-input', () => (
qrCode.value = input.value
)
);
</script>
テキストボックスに入力された文字列をもとにQRコードを動的に生成させるには、「<sl-qr-code>」タグのvalueに入力された文字列を設定すればいいだけです。
なお、イベント『sl-input』はタグ「<sl-input>」の入力時のイベントになります。
生成したQRコードを出力する方法
<script >
// QRコード保存処理
function saveQR() {
const qrCode = document.querySelector('sl-qr-code');
const a = document.createElement("a");
a.href = qrCode.canvas.toDataURL("image/png", 0.92); // PNGなら"image/png"
a.download = "qrcode.png";
a.click();
}
</script>
タグ「<sl-qr-code」の配下には『canvas』オブジェクトがあります。
「HTMLCanvasElement」オブジェクトにはメソッド『toDataURL』があるので、それを利用することで生成したQRコードをダウンロードさせることが可能です。
「<sl-qr-code> 」の属性・プロパティ
デモ
属性・プロパティ
value
QRコードで読み取らせたい文字列を定義する属性です。
label
補助デバイスに通知したい文字列を定義できる属性です。もし指定がなければ、「value」の文字列が代わりに『label』として利用されます。
fill/background
「fill」はQRコードの色、「background」は背景色の定義になります。
「fill」のデフォルトは『black』、「background」は『white』です。
<sl-qr-code value="https://shoelace.style/" fill="deeppink" background="white"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" fill="red" background="white"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" fill="blue" background="white"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" fill="green" background="white"></sl-qr-code>
size
QRコードのサイズをピクセルで指定できる属性です。デフォルトは『128』です。
<sl-qr-code value="https://shoelace.style/" size="64"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" size="128"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" size="256"></sl-qr-code>
radius
縁の背景を指定できるプロパティです。0~0.5の間で指定してください。
デフォルトは『0』です。
<sl-qr-code value="https://shoelace.style/" radius="0"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" radius="0.1"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" radius="0.2"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" radius="0.3"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" radius="0.4"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" radius="0.5"></sl-qr-code>
errorCorrection/error-correction
データを修復するためのエラー訂正能力を指定できるオプションです。
指定できる文字列は『L』『M』『Q』『H』です。デフォルトは『H』です。
上級者向けのオプションです。詳細は以下のページをご覧ください。
<sl-qr-code value="https://shoelace.style/" error-correction="L"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" error-correction="M"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" error-correction="Q"></sl-qr-code>
<sl-qr-code value="https://shoelace.style/" error-correction="H"></sl-qr-code>
ご参考
関連記事