Javascript – 頁面打印
在Web開發(fā)中,我們經(jīng)常需要實(shí)現(xiàn)頁面的打印功能,以便用戶可以將頁面內(nèi)容保存到紙質(zhì)文檔中。愛掏網(wǎng) - it200.com在經(jīng)過長時(shí)間的發(fā)展,現(xiàn)在大多數(shù)瀏覽器都提供了打印的API,使得前端開發(fā)者們可以方便地實(shí)現(xiàn)頁面的打印功能。愛掏網(wǎng) - it200.com
在Javascript中,我們可以通過調(diào)用window.print()
方法來實(shí)現(xiàn)頁面的打印。愛掏網(wǎng) - it200.com該方法沒有任何參數(shù),調(diào)用方法非常簡單,可以直接在頁面的某個(gè)按鈕上綁定點(diǎn)擊事件。愛掏網(wǎng) - it200.com
<button onclick="window.print()">打印</button>
通過上面的代碼,我們可以在頁面上創(chuàng)建一個(gè)按鈕,用戶點(diǎn)擊后會(huì)彈出打印對(duì)話框,簡單便捷。愛掏網(wǎng) - it200.com
打印樣式
但是,如果直接使用上面的代碼,打印出來的頁面可能會(huì)非常難看,因?yàn)闃邮降纫曈X效果并沒有得到保留。愛掏網(wǎng) - it200.com因此,我們需要通過樣式表的方式來設(shè)置打印時(shí)的樣式。愛掏網(wǎng) - it200.com
我們可以通過創(chuàng)建一個(gè)專門的打印樣式表來實(shí)現(xiàn)。愛掏網(wǎng) - it200.com我們可以在HTML頭部中通過<link>
元素來指定打印樣式表:
<link rel="stylesheet" media="print">
通過media
屬性指定樣式表僅在打印時(shí)生效,不影響瀏覽器的顯示效果。愛掏網(wǎng) - it200.com
針對(duì)使用了Bootstrap等框架的頁面,打印時(shí)需要進(jìn)行一些額外的樣式設(shè)置。愛掏網(wǎng) - it200.com例如,需要將頁面中的col-*
等布局和柵格類忽略掉,以免在打印時(shí)影響視線。愛掏網(wǎng) - it200.com我們可以在打印樣式表中添加以下樣式。愛掏網(wǎng) - it200.com
@media print {
.container, .container-fluid {
width: auto !important;
}
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12,
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12,
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
float: none !important;
margin: 0 !important;
padding: 0 !important;
display: inline-block !important;
}
}
上面的代碼中,我們將.container
和.container-fluid
類的寬度設(shè)為了auto
,同時(shí)將所有柵格類的位置按照左對(duì)齊的方式重新排列。愛掏網(wǎng) - it200.com這樣,在進(jìn)行打印操作時(shí),頁面就可以自動(dòng)進(jìn)行排版,同時(shí)保證當(dāng)前頁面中使用的樣式仍然能夠保留下來。愛掏網(wǎng) - it200.com
打印事件
有時(shí)候,我們需要在用戶進(jìn)行打印操作時(shí)執(zhí)行一些特定的操作,比如發(fā)送后臺(tái)請(qǐng)求、保存打印日志等。愛掏網(wǎng) - it200.com此時(shí),我們需要在打印事件中添加相應(yīng)的代碼。愛掏網(wǎng) - it200.com
瀏覽器提供了兩個(gè)打印事件:onbeforeprint
和onafterprint
。愛掏網(wǎng) - it200.com當(dāng)用戶點(diǎn)擊打印按鈕后,瀏覽器會(huì)首先觸發(fā)onbeforeprint
事件,其次才會(huì)彈出打印窗口。愛掏網(wǎng) - it200.com最終,當(dāng)用戶關(guān)閉打印窗口后,瀏覽器會(huì)觸發(fā)onafterprint
事件。愛掏網(wǎng) - it200.com
我們可以通過使用window.matchMedia
方法來監(jiān)聽這兩個(gè)事件。愛掏網(wǎng) - it200.com
window.onbeforeprint = function () {
// 在打印前執(zhí)行的操作
};
window.onafterprint = function () {
// 在打印后執(zhí)行的操作
};
示例代碼
下面是一個(gè)包含打印樣式和打印事件的示例代碼。愛掏網(wǎng) - it200.com
<!DOCTYPE html>
<html>
<head>
<title>打印示例</title>
<link rel="stylesheet" media="print">
</head>
<body>
<h1>打印示例</h1>
<p>這是一段測(cè)試數(shù)據(jù)。愛掏網(wǎng) - it200.com</p>
<button id="print-btn">打印</button>
<!-- 在頁面底部添加一個(gè)隱藏的提示框 -->
<div id="print-tip" style="display: none;">正在打印,請(qǐng)稍候...</div>
<script>
// 監(jiān)聽打印事件
window.onbeforeprint = function() {
// 在打印前顯示提示框
document.getElementById("print-tip").style.display = "block";
// 發(fā)送日志請(qǐng)求
sendLog();
};
window.onafterprint = function() {
// 在打印后隱藏提示框
document.getElementById("print-tip").style.display = "none";
};
// 綁定打印按鈕的點(diǎn)擊事件
var printBtn = document.getElementById("print-btn");
printBtn.onclick = function() {
// 顯示提示框
document.getElementById("print-tip").style.display = "block";
// 延時(shí)1秒后執(zhí)行打印操作
setTimeout(function() {
window.print();
}, 1000);
};
// 發(fā)送日志請(qǐng)求
function sendLog() {
// 將請(qǐng)求代碼省略
console.log("正在發(fā)送日志請(qǐng)求...");
}
</script>
</body>
</html>
結(jié)論
通過本文的介紹,我們了解了如何使用Javascript實(shí)現(xiàn)頁面的打印功能,以及如何設(shè)置打印樣式和添加打印事件。愛掏網(wǎng) - it200.com在實(shí)際項(xiàng)目中,我們可以根據(jù)具體需求進(jìn)行相應(yīng)的修改和擴(kuò)展,讓打印功能更加符合實(shí)際需求。愛掏網(wǎng) - it200.com