首页 > 其他分享 >vue 打印

vue 打印

时间:2022-10-18 10:14:25浏览次数:46  
标签:function inputs vue obj dom 打印 print var

print.js /* eslint-disable */ const Print = function (dom, options) {   if (!(this instanceof Print)) return new Print(dom, options);
  this.options = this.extend({     'noPrint': '.no-print'   }, options);
  if ((typeof dom) === "string") {     this.dom = document.querySelector(dom);   } else {     this.isDOM(dom)     this.dom = this.isDOM(dom) ? dom : dom.$el;   }
  this.init(); }; Print.prototype = {   init: function () {     var content = this.getStyle() + this.getHtml();     this.writeIframe(content);   },   extend: function (obj, obj2) {     for (var k in obj2) {       obj[k] = obj2[k];     }     return obj;   },
  getStyle: function () {     var str = "",       styles = document.querySelectorAll('style,link');     for (var i = 0; i < styles.length; i++) {       str += styles[i].outerHTML;     }     str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";
    return str;   },
  getHtml: function () {     var inputs = document.querySelectorAll('input');     var textareas = document.querySelectorAll('textarea');     var selects = document.querySelectorAll('select');
    for (var k = 0; k < inputs.length; k++) {       if (inputs[k].type == "checkbox" || inputs[k].type == "radio") {         if (inputs[k].checked == true) {           inputs[k].setAttribute('checked', "checked")         } else {           inputs[k].removeAttribute('checked')         }       } else if (inputs[k].type == "text") {         inputs[k].setAttribute('value', inputs[k].value)       } else {         inputs[k].setAttribute('value', inputs[k].value)       }     }
    for (var k2 = 0; k2 < textareas.length; k2++) {       if (textareas[k2].type == 'textarea') {         textareas[k2].innerHTML = textareas[k2].value       }     }
    for (var k3 = 0; k3 < selects.length; k3++) {       if (selects[k3].type == 'select-one') {         var child = selects[k3].children;         for (var i in child) {           if (child[i].tagName == 'OPTION') {             if (child[i].selected == true) {               child[i].setAttribute('selected', "selected")             } else {               child[i].removeAttribute('selected')             }           }         }       }     }
    return this.dom.outerHTML;   },
  writeIframe: function (content) {     var w, doc, iframe = document.createElement('iframe'),       f = document.body.appendChild(iframe);     iframe.id = "myIframe";     //iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";     iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');     w = f.contentWindow || f.contentDocument;     doc = f.contentDocument || f.contentWindow.document;     doc.open();     doc.write(content);     doc.close();     var _this = this     iframe.onload = function(){       _this.toPrint(w);       setTimeout(function () {         document.body.removeChild(iframe)       }, 100)     }   },
  toPrint: function (frameWindow) {     try {       setTimeout(function () {         frameWindow.focus();         try {           if (!frameWindow.document.execCommand('print', false, null)) {             frameWindow.print();           }         } catch (e) {           frameWindow.print();         }         frameWindow.close();       }, 10);     } catch (err) {       console.log('err', err);     }   },   isDOM: (typeof HTMLElement === 'object') ?     function (obj) {       return obj instanceof HTMLElement;     } :     function (obj) {       return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';     } }; const MyPlugin = {} MyPlugin.install = function (Vue, options) {   // 4. 添加实例方法   Vue.prototype.$print = Print } export default MyPlugin ................................分割线................................ main.js导入 import Print from '@/utils/print' Vue.use(Print) ................................分割线................................ 页面中使用    <div ref="print">       <p class="no-print">非打印内容 方法1:添加no-print样式类</p>       <div>打印我</div>       <div class="no-print">我是不打印区域2</div>       <el-button class="no-print" type="primary" @click="dayin">打印</el-button>     </div>  dayin() {       this.$print(this.$refs.print) // 使用     }  给区域内不需要打印的内容加上no-print样式类


标签:function,inputs,vue,obj,dom,打印,print,var
From: https://www.cnblogs.com/sjruxe/p/16801637.html

相关文章

  • Vue面试题35:什么是递归组件?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
    分析递归组件我们用的比较少,但是在Tree、Menu这类组件中会被用到;体验组件通过组件名称引用它自己,这种情况就是递归组件<template><li><div>{{model.......
  • 一个简单的vuedraggle练习
    在vue项目中npmi vuedraggable引入页面中<template><divclass="row"><divclass="col-1"><h3>组件</h3><draggablecl......
  • new Vue的时候到底做了什么
    Vue加载流程1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周期函数前,然后进行数据监测和数据代理的初始化,也就......
  • Vue的computed和watch的区别是什么?
    一、computed介绍computed用来监控自己定义的变量,该变量在data内没有声明,直接在computed里面定义,页面上可直接使用。//基础使用{{msg}}<inputv-model="name"/>......
  • vuex 基本代码规范 js 文件
    importVuefrom"vue";importVuexfrom"vuex";import{setItem,getItem}from"@/utils/storage";Vue.use(Vuex);exportdefaultnewVuex.Store({state:{......
  • 一篇文章带你了解网页框架——Vue简单入门
    一篇文章带你了解网页框架——Vue简单入门这篇文章将会介绍我们前端入门级别的框架——Vue的简单使用如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文......
  • vue3+vite 使用defineAsyncComponent动态异步引入组件出错时的解决办法
    constname='c1'constcurrentComponent=shallowRef()constcomponents=import.meta.glob("./a/*.vue");currentComponent.value=defineAsyncComponent(compon......
  • vue的介绍与安装
    vue的介绍  vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML,CSS和JavaScript构建,并提供了一套声明式、组件化的编程模型,帮助你高效地开发用户界面。无论......
  • Vue实现用户登录管理
    Vue实现用户登录管理vuex+cookie+router业务流程:1、用户在注册时提交信息,后端生成用户的数据2、用户登录时通过网页表单提交用户名和密码,后台根据提交的数据生成to......
  • 【汇编】图形打印(.asm源码)
    项目环境编译环境:搭建一个nasm2.8的编译环境。镜像文件:采用winhex_18.2刷入编码。虚拟机:采用Bochs-2.4.5。项目软件傻瓜式环境配置。解压文件到D盘能直接使用。​​项目软件......