解决windown.print()打印网页后,事件失效问题

使用windown.print()封装一个打印的工具函数

原本封装的print.js
export default function print() {
  // 打印功能
  const printDom = ref(null)  //要打印区域的id
  const printOut = dom => {
    const subOutputRankPrint = document.getElementById(printDom)
    console.log(subOutputRankPrint.innerHTML)
    const newContent = subOutputRankPrint.innerHTML
    const oldContent = document.body.innerHTML
    document.body.innerHTML = newContent
    window.print()
    window.location.reload()
    // document.body.innerHTML = oldContent
    return false
  }
  return {
    printDom,
    printOut
  }
}

直接在组件中导入printDom和printOut()使用即可,但是有一个问题就是打印完成后,页面的事件会失效,需要刷新document.body.innerHTML = oldContent,页面的事件才会生效,这样用户体验感非常不好。

所以换一种思路,既然重新插入的innerHTML事件无效,那就把要打印的content.innerHTML不在放到document.body.innerHTML中,而是重新创建一个div用来存放要打印的innerHTML,并设置该div样式。打印完成后,移除掉添加的div即可。

export default function print() {
  const printDom = ref(null)
  const printOut = dom => {
    const subOutputRankPrint = document.getElementById(printDom)
    // 创建一个新的div
    const printDiv = document.createElement('div')
    printDiv.innerHTML = subOutputRankPrint.innerHTML
    printDiv.style.position = 'fixed'
    printDiv.style.left = '0'
    printDiv.style.top = '0'
    printDiv.style.width = '100%'
    printDiv.style.height = '100%'
    printDiv.style.zIndex = '999999'
    printDiv.style.background = '#fff'
    printDiv.style.overflow = 'auto'
    // 插入到网页中去
    document.body.appendChild(printDiv)
    window.print()
    document.body.removeChild(printDiv)
    return false
  }
  return {
    printDom,
    printOut
  }
}

效果完美实现,打印完成后,页面无需刷新,事件未失效。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值