今天小编在代课的时候,发现很多刚刚接触前端领域的同学还不太清楚如何实现用户区域打印,网上的很多博客也只是只贴出了解决代码,但或许并不帮助大家了解其到底是什么意思。

小编今天就具体的来给讲一讲如何在vue-cli的环境下实现web的打印指定区域的内容(文字或者表格图表),让大家在学习的过程中少走一些弯路。

走起,先看完成效果图:

如何实现上诉需求呢,接下来咱们就一一讲解,首先咱们先把代码切分为四个部分:

1.创建一个构造函数Print

2.给Print的prototype添加需要用到方法

3.声明一个常量MyPlugin 为它添加方法 将Print方法挂载到Vue原型链上

4.export导出MyPlugin

第一步创建一个构造函数Print 默认接受两个参数 一个是打印的指定区, 一个是自定义页眉的标题。 (要注意哦,这里有些同学可能会不懂这个判断的意思,因为这里的this是指向Vue的,通过instanceof 来判断这时候的this是否为Print的子类,如果不是,就通过new操作符调用,使this指向Print本身。)然后这里做一个容错,判断一下传进来的dom是否为object、是否有nodeType和nodeName这两个属性,如果没有,证明不是一个节点,那就取dom下的$el,然后把处理过后的dom和name分别赋值给this.dom和this.name,方便在prototype里随时取值 同时执行初始化方法。

init方法里为了实现打印并且自定义标题,我们需要重新获取到样式和页面元素展示到一个新的html里面,最后通过writeIframe方法完成咱们最终打印的效果。

在getStyle方法里,自定义一个空字符串,通过 querySelectorAll 方法获取到当前页面全部的style和link标签,并且通过循环拿到每一个的outerHTML(纯文本形式)最后通过return暴露出来。

getHtml方法,主要是特殊处理一下 input、textarea、select、canvas。把前三个打value值重新获取通过innerHTML的方法展现出来,把canvas画布转换成图片的格式展现出来。然后进入下一步setHeader方法,来自定义页眉的标题。

这里是因为在DOM上,input、textarea、select中的值并没有在元素内,只有纯文本才可以被print(),同样打印也不支持canvas。所以咱们需要重新处理一下,使里面的值也可以被打印出来~

在这一步,实际上是重新创建了一个html标签和title,然后通过克隆出要打印的区域,添加到新创建的html当中,然后return出这个新页面里的全部纯文本元素。这个时候已经需要打印的html和自定义标题已经出来了。(这里同学们千万要注意,因为打印的默认标题是页面里的title,如果直接改变原页面的title来实现自定义标题效果的话,会造成原页面的title错乱。)

这个时候回到init方法 content就是咱们全部需要输入的标签。执行writeIframe方法,这里面主要是通过document.open 来打开一个新文档,document.write来编写文档的内容,document.close 来关闭文档操作 使其内容可以显示出来

然后红线圈出的地方有一个获取全部类名为isNeedRemove的操作,是因为之前在把canvas转换成图片的时候 给每个的后面都插入了一个转换后的img 这里为了让图形不出现两个的情况需要删除所有类名为isNeedRemove的节点,同时执行最终的打印方法。

这里的frameWindow形参其实就是咱们需要调用到的window,通过try catch来保证结果在一个控制范围内,如果成功运行,调用window下的print方法,失败则抛出异常。

最终将写好的方法添加到vue的原型链上,在公共的main.js 里通过import 引入,Vue.use挂载,然后在想要使用的组件内直接通过this.$print()使用即可。

好啦~今天讲到这里希望大家对这个web前端来实现打印的方法有一个新的理解,希望能给到大家一些帮助~

js 打印出来的节点多了m_前端实用技术分享—用Vue实现打印指定区域相关推荐

  1. js怎么定义combobox_好程序员web前端教程分享新手应该怎么学习webpack

    好程序员web前端教程分享新手应该怎么学习webpack,什么是webpack?一句话概括:webpack是一个模块打包工具(module bundler).重点在于两个关键词"模块&quo ...

  2. 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。

    //输入一个链表,从尾到头打印链表每个节点的值. //解题思路:遍历每一个节点  并将节点放入数组中 最后翻转数组 function printListFromTailToHead($head) {$ ...

  3. vue封装打印插件print.js实现打印组件功能

    代码 插件地址:https://github.com/xyl66/vuePlugs_printjs 1. 打印插件属性方法 定义-print.js // 打印类属性.方法定义 /* eslint-di ...

  4. js原生后代选择器_JavaScript DOM查询,原生js实现元素子节点的获取

    每个网页都是一个dom树,网页中所有的内容都是这个树上的一个节点.JavaScript的工作就是操作这些节点,对节点进行查增删改操作,或是给节点绑定事件. 网页 dom树 要操作dom节点,首先要获取 ...

  5. html遍历table tr,js中获取 table节点各tr及td的内容简单实例

    js中获取 table节点各tr及td的内容简单实例 2019-01-06 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了js中获取 table节点各tr及td ...

  6. html打印指定区域内容,js print打印网页指定区域内容

    比较简单的办法 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 细如下: 代码如下 .noprint{visibility:hidden} 要打印的内容.哈哈! ...

  7. html用js添加兄弟节点,JS简单添加元素新节点的方法示例

    本文实例讲述了JS简单添加元素新节点的方法.分享给大家供大家参考,具体如下: www.jb51.net - JS添加新节点的几种方法 1234567890 //首先找到Id为d的元素 var d=do ...

  8. JS添加多个子节点的方法

    JS 利用数组一次创建多个元素 function createLi(createArr) { // 一次创建多个元素let newdata = {}for(let i = 0; i < crea ...

  9. js打印页面指定区域内容

    2种方式: 一种只支持IE浏览器 另一种支持各类浏览器 <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

最新文章

  1. 利用runtime实现KVO
  2. 知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践
  3. ITK:处理3D图像的2D切片
  4. 51 FI配置-财务会计-固定资产-折旧-维护期间控制方法
  5. Linux系统NFS什么意思,挂载NFS到底是什么概念
  6. 和显卡驱动要配套吗_显卡有必要更新驱动程序吗?老玩家的建议请收好
  7. dubbo源码 -- 服务导出
  8. 【Java】俄罗斯方块小游戏(附源码)
  9. Python设计模式:策略模式
  10. 面试:HLS加密视频播放模糊不清
  11. linux学习(三)输入输出重定向和管道功能、cat命令、more命令
  12. linux全角半角切换快捷键,切换中英文标点快捷键,全角半角之间的转换快捷键
  13. oracle 中 的 =,oracle中=是什么意思
  14. J9数字货币科普:什么是加密借贷?有什么风险存在?
  15. 本科生毕业设计选题——计算机类
  16. sec和asec--正割和反正割函数
  17. 【03yy and one】
  18. quagga 的原理解析 zebra原理解析
  19. 利用C语言设计一个猜数字游戏
  20. 【ZYNQ Ultrascale+ MPSOC FPGA教程】第十三章 RS485实验

热门文章

  1. 我的RTOS 之二 --Threadx在skyeye上仿真測试(基于2410)
  2. mysql flaskalchemy_python flask sqlalchemy 数据库mysql操作
  3. LeetCode:通过递归方法打印杨辉三角形
  4. 写一段jdbc连oracle的程序java类_并实现数据查询_一段Jdbc连Oracle的程序,并实现数据查询....
  5. python中ndarray除_Numpy 基本除法运算和模运算
  6. 2019-12-18 syscall(SYS_clock_gettime, CLOCK_MONOTONIC_RAW
  7. GDAL的一个BUG
  8. IOCP编程之基本原理
  9. r语言c50算法的过程,【机器学习与R语言】5-规则学习算法
  10. nodejs json转对象_nodejs读取xlsx格式文件