JavaScriptの .print()
を使って、ボタンクリックするとそのページが印刷されるボタンを作ってみました。
少し前のWebメディアでよく見かけた「このページを印刷」のボタンです。
印刷対象外の指定も比較的簡単なので、ブログや、メディアを運営している方は参考にしてみてください。
.print()
avaScriptの.print()
は、現在の文書を印刷するための印刷ダイアログを開くメソッドです。
window.print()
このメソッドが実行されると、それ以降の処理が中断しダイアログを閉じた後に、処理が引き続き実行されます。
印刷可能なボタンのサンプル
早速サンプルです。以下の「このページを印刷」をクリックすると、印刷するためのダイアログが表示されます。
印刷のプレビューでは、このページの「このページを印刷」ボタンと、PCの場合左のサイドメニューが非表示の形で印刷されます。
このダイアログは、ブラウザーで印刷メニューを選択したときと同じ動作となります。
実装の手順と方法
コードの解説の前に、実装の手順と方法について解説します。
まずはじめに、HTMLに印刷ボタンを表示したい場所へコードを記述します。
<button id="pagePrint">このページを印刷</button>
次にJavaScriptを記述します。
コードは <body>〜</body>
で、</body>
の閉じタグ(クロージングタグ)の前に記述しましょう。
document.getElementById('pagePrint').addEventListener('click', () => {
const side = document.querySelector('.wordpressside');
const btn = document.querySelector('.javaSample');
const main = document.getElementById('wordpressinner');
const widthOriginal = main.style.paddingLeft; // 元のpaddingを覚えておく
side.style.display = 'none'; //印刷時に非表示
btn.style.display = 'none'; //印刷時に非表示
main.style.paddingLeft = '0';
window.print();
side.style.display = 'block'; //印刷終わったら戻す
btn.style.display = 'block'; //印刷終わったら戻す
main.style.paddingLeft = widthOriginal; // 元のpaddingに戻す
});
これで完了です。
ざっくりとしたコードの解説
コードは、HTML・JavaScriptの2種類です。順に解説していきます。
HTML
HTMLはid名に「pagePrint」を付与した button
タグ、これだけです。
<button id="pagePrint">このページを印刷</button>
id名は .addEventListener
のトリガーになるので、変更する場合はJavaScriptの .getElementById
の中も同じものに変更するようにしてください。
JavaScript
JavaScriptは、.addEventListener
のクリックで発動し、まずはじめの const
で非表示にする要素を指定します。
要素が指定できたら、それらの display
プロパティを「none」にします。尚、当サイトのこのページは左メニューがあるのでその部分だけ padding-left
も対象にしてします。
document.getElementById('pagePrint').addEventListener('click', () => {
const side = document.querySelector('.wordpressside');
const btn = document.querySelector('.javaSample');
const main = document.getElementById('wordpressinner');
const widthOriginal = main.style.paddingLeft; // 元のpaddingを覚えておく
side.style.display = 'none'; //印刷時に非表示
btn.style.display = 'none'; //印刷時に非表示
main.style.paddingLeft = '0';
window.print();
side.style.display = 'block'; //印刷終わったら戻す
btn.style.display = 'block'; //印刷終わったら戻す
main.style.paddingLeft = widthOriginal; // 元のpaddingに戻す
});
そして、その後に window.print();
で印刷ダイアログが立ち上がり、完了後に元の状態に戻ります。
さいごに
このようなコードで印刷ボタンの実装が可能で、これに加えてCSSのメディアクエリの print で印刷のサイズや表示要素も細かく指定すれば、尚GOODです。