In diesem Artikelbeispiel wird der spezifische Code von Vue zur automatischen Seitennummerierung beim Drucken von Seiten zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt 1. Elemente zum Drucken per Referenz abrufen1. Kapseln Sie eine JS-Datei ein // Klassenattribute und Methodendefinitionen drucken/* eslint-disable */ const Print = Funktion (dom, Optionen) { if (!(diese Instanz von Print)) returniere neues Print(dom, Optionen); diese.Optionen = diese.erweitern({ 'keinDrucken': '.keinDrucken' }, Optionen); wenn ((Typ von dom) === "Zeichenfolge") { Dies.dom = document.querySelector(dom); } anders { dies.istDOM(dom) dies.dom = dies.isDOM(dom) ? dom : dom.$el; } dies.init(); }; Drucken.prototype = { init: Funktion () { var Inhalt = this.getStyle() + this.getHtml(); dies.writeIframe(Inhalt); }, erweitern: Funktion (Objekt, Objekt2) { für (var k in obj2) { obj[k] = obj2[k]; } gibt Objekt zurück; }, getStyle: Funktion () { var str = "", Stile = document.querySelectorAll('Stil, Link'); für (var i = 0; i < Stile.Länge; i++) { str += Stile[i].äußeresHTML; } str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>"; str += "<style>html,body,div{height: auto!important;font-size:12px}</style>"; gibt str zurück; }, getHtml: Funktion () { var Eingaben = document.querySelectorAll('Eingabe'); var textareas = document.querySelectorAll('textarea'); var wählt = document.querySelectorAll('Auswählen'); für (var k = 0; k < Eingaben.Länge; k++) { wenn (Eingaben[k].Typ == "Kontrollkästchen" || Eingaben[k].Typ == "Radio") { wenn (Eingaben[k].checked == true) { inputs[k].setAttribute('aktiviert', "aktiviert") } anders { Eingaben[k].removeAttribute('aktiviert') } } sonst wenn (Eingaben[k].Typ == "Text") { Eingaben[k].setAttribute('Wert', Eingaben[k].Wert) } anders { Eingaben[k].setAttribute('Wert', Eingaben[k].Wert) } } für (var k2 = 0; k2 < Textbereiche.Länge; k2++) { wenn (Textbereiche[k2].Typ == 'Textbereich') { Textbereiche[k2].innerHTML = Textbereiche[k2].Wert } } für (var k3 = 0; k3 < selects.length; k3++) { wenn (wählt[k3].Typ == 'select-one') { var Kind = wählt[k3].Kinder; für (var i in Kind) { wenn (Kind[i].tagName == 'OPTION') { wenn (Kind[i].selected == true) { Kind[i].setAttribute('ausgewählt', "ausgewählt") } anders { Kind[i].removeAttribute('ausgewählt') } } } } } gib this.dom.outerHTML zurück; // Das zu druckende Element umschließen // Fix: https://github.com/xyl66/vuePlugs_printjs/issues/36 // lass outerHTML = this.wrapperRefDom(this.dom).outerHTML // äußeresHTML zurückgeben; }, // Schleife zum übergeordneten Element und umschließe das Element, das gedruckt werden soll // Verhindere, dass der CSS-Selektor am Anfang der Stammebene wirksam wird wrapperRefDom: function (refDom) { let prevDom = null lass currDom = refDom // Bestimmen Sie, ob sich das aktuelle Element im Textkörper befindet. Wenn nicht im Dokument, geben Sie den Knoten direkt zurück, wenn (!this.isInBody (currDom)) return currDom während (aktuellerDom) { wenn (vorherigerDom) { let-Element = currDom.cloneNode(false) element.appendChild(vorherigerDom) vorherigerDom = Element } anders { vorherigerDom = currDom.cloneNode(true) } currDom = currDom.übergeordnetesElement } Zurück zum vorherigen Dom }, writeIframe: Funktion (Inhalt) { var w, doc, iframe = Dokument.createElement('iframe'), f = Dokument.Body.AnhängenUntergeordnetesElement(iframe); iframe.id = "meinIframe"; //iframe.style = "Position:absolut;Breite:0;Höhe:0;oben:-10px;links:-10px;"; iframe.setAttribute('Stil', 'Position:absolut;Breite:0;Höhe:0;oben:-10px;links:-10px;'); w = f.Inhaltsfenster || f.Inhaltsdokument; doc = f.Inhaltsdokument || f.Inhaltsfenster.document; doc.öffnen(); doc.write(Inhalt); doc.schließen(); var _this = dies iframe.onload = Funktion(){ _this.toPrint(w); setzeTimeout(Funktion () { Dokument.Body.RemoveChild(iframe) }, 100) } }, toPrint: Funktion (Rahmenfenster) { versuchen { setzeTimeout(Funktion () { Rahmenfenster.Fokus(); versuchen { wenn (!frameWindow.document.execCommand('print', false, null)) { Rahmenfenster.drucken(); } } fangen (e) { Rahmenfenster.drucken(); } Rahmenfenster.schließen(); }, 10); } fangen (Fehler) { console.log('err', err); } }, //Überprüfen Sie, ob ein Element ein Nachkomme des Body-Elements und nicht das Body-Element selbst ist. isInBody: function (node) { return (Knoten === Dokument.Body) – false: Dokument.Body.contains(Knoten); }, isDOM: (Typ des HTML-Elements === „Objekt“)? Funktion (Objekt) { gibt ein Objekt der Instanz des HTMLElements zurück; } : Funktion (Objekt) { returniere Objekt && Objekttyp === 'Objekt' && Objekt.Knotentyp === 1 && Objekttyp.Knotenname === 'Zeichenfolge'; } }; const MyPlugin = {} MyPlugin.install = Funktion (Vue, Optionen) { // 4. Instanzmethode hinzufügen Vue.prototype.$printPage = Print } Standard-MyPlugin exportieren 2. Legen Sie die Datei in einen Ordner im Projekt 3. Globale Referenz in main.js 4. Seitennutzung Hinweis: Wenn Sie den Inhalt nicht drucken möchten, stellen Sie die Klasse einfach auf „No-Print“ ein. 2. Verwenden Sie die im Browser integrierte Methode window.print(), um HTML-Inhalte zum Drucken abzurufenNachteile: Der Stil kann nur auf das Etikett geschrieben werden, sonst wird er nicht wirksam 1. Kapseln Sie eine JS-Datei ein Export-Standardfunktion printHtml(html) { lass Stil = getStyle(); : Container = getContainer(html); Dokument.Body.AppendChild(Stil); Dokument.Body.AnhängenUntergeordnetesElement(Container); getLoadPromise(container).then(() => { fenster.drucken(); Dokument.Body.removeChild(Stil); Dokument.Body.RemoveChild(Container); }); } //Druckstil festlegen Funktion getStyle() { let styleContent = `#Druckcontainer { Anzeige: keine; } @media drucken { body > :nicht(.print-container) { Anzeige: keine; } html, Körper { Rand: 0 0,2cm; Anzeige: Block !wichtig; Höhe: automatisch; } #Druckcontainer { Anzeige: Block; } @Seite { Rand: 0,25 cm 0; } }`; let style = document.createElement("Stil"); style.innerHTML = Stilinhalt; Rückgabestil; } // Lösche den Druckinhalt Funktion cleanPrint() { let div = document.getElementById('Druckcontainer') wenn (!!div) { Dokument.QuerySelector('body').removeChild(div) } } //Erstellen Sie ein neues DOM und füllen Sie den zu druckenden Inhalt in das DOM Funktion getContainer(html) { sauberDrucken() let container = document.createElement("div"); container.setAttribute("id", "Druckcontainer"); Container.innerHTML = html; Rücknahmebehälter; } // Rufe die Druckmethode auf, nachdem das Bild vollständig geladen ist. Funktion getLoadPromise(dom) { let imgs = dom.querySelectorAll("img"); imgs = [].slice.call(imgs); wenn (Bildlänge === 0) { gibt Promise.resolve() zurück; } lass fertigeAnzahl = 0; gib ein neues Versprechen zurück (Auflösen => { Funktion check() { fertigeAnzahl++; if (finishedCount === imgs.length) { lösen(); } } imgs.forEach(img => { img.addEventListener("laden", prüfen); img.addEventListener("Fehler", prüfen); }) }); } 2. Legen Sie die Datei in einen Ordner im Projekt 3. Direkter Import der Seite 4. Seitennutzung Hinweis: Für Inhalte, die nicht gedruckt werden müssen, stellen Sie einfach die Stilanzeige ein: keine auf dem Etikett; Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Navicat stellt eine Verbindung zu MySQL8.0.11 her und es tritt ein Fehler 2059 auf
>>: Methoden und Schritte zum Bereitstellen einer GitLab-Umgebung basierend auf Docker
Vorwort „Wenn es um Bildbearbeitung geht, denken ...
Schritt 1: Umgebungsvariablen konfigurieren (mein...
Rational ClearCase ist ein Tool für das Softwarek...
1. Liste Der Listen-UL- Container wird mit einer ...
Inhaltsverzeichnis Funktionsprinzip: Was macht de...
Arten von Verknüpfungen 1. Innerer Join: Die Feld...
Dieser Artikel stellt hauptsächlich die Lösung fü...
Im Vergleich zu anderen großen Datenbanken wie Or...
Die bedeutendste Website-Änderung im Jahr 2011 bet...
Inhaltsverzeichnis Vorwort Eingabefeldkomponente ...
Die Umgebung dieses Artikels ist Windows 10 und d...
Heute werde ich mit Ihnen über das Löschen von Fl...
Detaillierte Analyse der Iframe-Nutzung <iframe...
Beim Freigeben eines Projekts müssen Sie häufig d...
In letzter Zeit muss ich im Projekt viele fragmen...