前端页面window.print()实现局部打印

61 篇文章 1 订阅
18 篇文章 2 订阅

近期在做一个需要局部打印页面考试成绩的功能,总体来说有两个思路:

  1. dom替换

  2. 新窗口打印

dom替换会导致事件失效,如果重新加载的话又会影响到体验;而新窗口缺因为样式问题也不好解决,都不满足项目的需求,于是把自己的方法贴上来:

<template>
  <div id="printcontent"> //给需要打印的区域一个id
    <div @click="report">打印考试结果</div>	
  </div>
</template>
<script>
  export default {
    methods: {
      report(){
        let printDiv = document.createElement('div')//创建一个新的div
        printDiv.innerHTML = document.getElementById("printcontent").innerHTML//把要打印的内容放到一个新的div里
        printDiv.style.position = 'fixed'//div宽高设置100%;position设为fixed或者absolute占满屏幕,把当前页面内容全部覆盖住
        printDiv.style.left = '0'
        printDiv.style.top = '0'
        printDiv.style.width = '100%'
        printDiv.style.height = '100%'
        printDiv.style.zIndex = '100000'
        printDiv.style.background = '#fff'
        printDiv.style.overflow = 'auto'
        document.body.appendChild(printDiv)//在body中添加创建的新结点
        window.print()
        document.body.removeChild(printDiv)//打印成功后删除创建的这个节点
      }
    }
  }
</script>
<style lang="stylus" scoped>
@page {   //css @page 设置 纸张方向
  size: a4 //定义为a4纸
  margin: 0mm 0mm //页面的边距,主要是用来去掉页眉页脚的
}
</style>

代码很简单,把要打印的内容放到一个新的div里,div宽高设置100%;position设为fixed或者absolute占满屏幕,把当前页面内容全部覆盖住,调用window.print()之后再把该div删除。这样既会使本来的样式生效,也不会有替换dom产生的各种问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值