手动点击 打印

// 最初调用函数
function submit() {
const style = getStyle(); // 需要打印的数据获取innerHTML const container = getContainer(document.querySelector('.next-drawer-body')?.innerHTML); document.body.appendChild(style); document.body.appendChild(container); getLoadPromise(container).then(() => { window.onbeforeprint = function () { // 将一些不需要打印的元素隐藏 console.log(container.querySelector('.funcButton'), 'qianqi1'); container.querySelector('.funcButton')?.setAttribute('style', 'display:none'); }; window.print(); window.onafterprint = function () { // 放开隐藏的元素 console.log(container.querySelector('.funcButton'), 'wanceng1'); container.querySelector('.funcButton')?.setAttribute('style', 'display:block'); }; document.body.removeChild(style); document.body.removeChild(container); }); } // 设置打印样式 function getStyle() { const styleContent = `#print-container { display: none; } @media print { body > :not(.print-container) { display: none;
margin:0 4.5cm 0 0;// 调控打印视图的间距
}
html,
body {
display: block !important;
}
#print-container {
display: block;
}
}`;
const style = document.createElement('style');
style.innerHTML = styleContent;
return style;
}

// 清空打印内容
function cleanPrint() {
const div = document.getElementById('print-container');
if (div) {
(document.querySelector('body') as any).removeChild(div);
}
}

// 新建DOM,将需要打印的内容填充到DOM
function getContainer(html) {
cleanPrint();
const container = document.createElement('div');
container.setAttribute('id', 'print-container');
container.innerHTML = html;
return container;
}

// 图片完全加载后再调用打印方法
function getLoadPromise(dom) {
let imgs = dom.querySelectorAll('img');
imgs = [].slice.call(imgs);

if (imgs.length === 0) {
return Promise.resolve();
}

let finishedCount = 0;
return new Promise((res) => {
function check() {
finishedCount++;
if (finishedCount === imgs.length) {
     return res(dom);
}
}
imgs.forEach((img) => {
img.addEventListener('load', check);
img.addEventListener('error', check);
});
});
}

 

posted @ 2022-04-08 19:52  玖捌  阅读(49)  评论(0)    收藏  举报