suchen
HeimWeb-Frontendjs-TutorialEntwickeln Sie eine vollständige JavaScript-Komponente

Als Entwickler sollte jeder wissen, dass es im Browser einige integrierte Steuerelemente gibt: Warnung, Bestätigung usw. Allerdings haben diese Steuerelemente je nach Browserhersteller normalerweise unterschiedliche Formen und die visuellen Effekte sind oft nicht gut um den Anforderungen des UI-Designers gerecht zu werden. Noch wichtiger ist, dass sich der Stil solcher integrierten Steuerelemente nur schwer mit den Designstilen verschiedener Internetprodukte mit sehr unterschiedlichen Stilen vereinen lässt. Daher entwickeln hervorragende Frontend-Entwickler ihre eigenen personalisierten Steuerelemente, um diese integrierten Browser-Steuerelemente zu ersetzen. Natürlich gibt es im Internet bereits unzählige hervorragende Komponenten dieser Art. Der Zweck des Schreibens dieses Artikels besteht nicht darin, zu erklären, wie hervorragend die von mir entwickelte Komponente ist, und ich hoffe auch nicht, dass ich auf diese Weise interagieren kann mit mehr Viele Entwickler kommunizieren miteinander, lernen voneinander und machen gemeinsam Fortschritte. Okay, kommen wir ohne weitere Umschweife zur Sache.

Funktionseinführung

  • Ersetzt die im Browser enthaltenen Warn- und Bestätigungssteuerelemente

  • Angepasster Schnittstellenstil

  • Nutzungsmethoden stimmen im Wesentlichen mit den integrierten Steuerelementen überein

Effektvorschau

1. Alarmsteuerung

2. Steuerung bestätigen

3. Vollständiger Code, Online-Vorschau (siehe unten, komprimierter Paket-Download wird bereitgestellt)

Entwicklungsprozess

 1. Komponentenstrukturdesign

Werfen wir zunächst einen Blick auf die grundlegende Verwendung integrierter Komponenten:

 alert("内置Alert控件");
 if (confirm("关闭内置Confirm控件?")) {
     alert("True");
 } else {
     alert("False");
 }

Um sicherzustellen, dass die Verwendung von Komponenten mit den integrierten Steuerelementen übereinstimmt, müssen wir erwägen, die integrierten Steuerelemente zu überschreiben. Unter Berücksichtigung des einheitlichen Stils, der Benutzerfreundlichkeit, der einfachen Wartung und der objektorientierten Eigenschaften der Komponentenentwicklung plane ich, die benutzerdefinierten Warn- und Bestätigungsmethoden als Instanzmethoden einer Klasse (Winpop) zu verwenden und schließlich die Instanzmethoden zu verwenden decken die integrierte Steuermethode des Systems ab. Um das Ziel zu erreichen, ist mein grundlegender Ansatz wie folgt:

var obj = new Winpop(); // 创建一个Winpop的实例对象
// 覆盖alert控件
window.alert = function(str) {
    obj.alert.call(obj, str);
};
// 覆盖confirm控件
window.confirm = function(str, cb) {
    obj.confirm.call(obj, str, cb);
};

Es ist zu beachten, dass unsere benutzerdefinierten Komponenten dies nicht tun, da die integrierten Steuerelemente des Browsers andere Verhaltensweisen des Browsers verhindern können Um so einheitlich wie möglich zu sein, verwenden wir, wie Sie in der Vorschau sehen können, beim Einblenden der benutzerdefinierten Komponente eine halbtransparente Maskenebene. Genau aus den oben genannten Gründen wurden einige subtile Anpassungen an der Art und Weise vorgenommen, wie die Bestätigungskomponente verwendet wird, von der integrierten Methode zur Rückgabe eines booleschen Werts bis zur Methode zur Verwendung einer Rückruffunktion, um sicherzustellen, dass „OK“ und „Abbrechen“ kann korrekt hinzugefügt werden. Daher sieht die Verwendung benutzerdefinierter Komponenten wie folgt aus:

alert("自定义Alert组件");
confirm("关闭自定义Confirm组件?", function(flag){
    if (flag) {
        alert("True");
    } else {
        alert("False");
    }
});

 2. Komponentencode-Design

In der formalen Einführung des Codes der Winpop-Komponente Vorher Schauen wir uns die Grundstruktur einer Javascript-Komponente an:

(function(window, undefined) {
    function JsClassName(cfg) {
        var config = cfg || {};
        this.get = function(n) {
            return config[n];
        }
        this.set = function(n, v) {
            config[n] = v;
        }
        this.init();
    }
    JsClassName.prototype = {
        init: function(){},
        otherMethod: function(){}
    };
    window.JsClassName = window.JsClassName || JsClassName;
})(window);

Verwenden Sie eine selbstausführende anonyme Funktion, um unseren Komponentencode zu verpacken, um die globale Umweltverschmutzung so weit wie möglich zu reduzieren, und verpacken Sie schließlich unseren Komponentencode Die Klasse wird an das globale Fensterobjekt angehängt, was ein empfohlener Ansatz ist.

Die Get- und Set-Methoden im Konstruktor sind nicht erforderlich, es ist nur die persönliche Gewohnheit des Autors. Ich bin der Meinung, dass das Schreiben auf diese Weise die aufrufenden Methoden zum Zwischenspeichern und Lesen von Konfigurationsparametern und die internen globalen Parameter anderer Komponenten vereinheitlichen kann Variablen, und es scheint effizienter zu sein. Leser sind herzlich eingeladen, ihre Gedanken mitzuteilen und zu sagen, ob es gut ist, so zu schreiben oder nicht.

Als nächstes werfen wir einen Blick auf den vollständigen Code der Winpop-Komponente:

(function(window, jQuery, undefined) {

    var HTMLS = {
        ovl: &#39;<p class="J_WinpopMask winpop-mask" id="J_WinpopMask"></p>&#39; + &#39;<p class="J_WinpopBox winpop-box" id="J_WinpopBox">&#39; + 
        &#39;<p class="J_WinpopMain winpop-main"></p>&#39; + &#39;<p class="J_WinpopBtns winpop-btns"></p>&#39; + &#39;</p>&#39;,
        alert: &#39;<input type="button" class="J_AltBtn pop-btn alert-button" value="确定">&#39;,
        confirm: &#39;<input type="button" class="J_CfmFalse pop-btn confirm-false" value="取消">&#39; + &#39;
        <input type="button" class="J_CfmTrue pop-btn confirm-true" value="确定">&#39;
    }

    function Winpop() {
        var config = {};
        this.get = function(n) {
            return config[n];
        }

        this.set = function(n, v) {
            config[n] = v;
        }
        this.init();
    }

    Winpop.prototype = {
        init: function() {
            this.createDom();
            this.bindEvent();
        },
        createDom: function() {
            var body = jQuery("body"),
                ovl = jQuery("#J_WinpopBox");

            if (ovl.length === 0) {
                body.append(HTMLS.ovl);
            }

            this.set("ovl", jQuery("#J_WinpopBox"));
            this.set("mask", jQuery("#J_WinpopMask"));
        },
        bindEvent: function() {
            var _this = this,
                ovl = _this.get("ovl"),
                mask = _this.get("mask");
            ovl.on("click", ".J_AltBtn", function(e) {
                _this.hide();
            });
            ovl.on("click", ".J_CfmTrue", function(e) {
                var cb = _this.get("confirmBack");
                _this.hide();
                cb && cb(true);
            });
            ovl.on("click", ".J_CfmFalse", function(e) {
                var cb = _this.get("confirmBack");
                _this.hide();
                cb && cb(false);
            });
            mask.on("click", function(e) {
                _this.hide();
            });
            jQuery(document).on("keyup", function(e) {
                var kc = e.keyCode,
                    cb = _this.get("confirmBack");;
                if (kc === 27) {
                    _this.hide();
                } else if (kc === 13) {
                    _this.hide();
                    if (_this.get("type") === "confirm") {
                        cb && cb(true);
                    }
                }
            });
        },
        alert: function(str, btnstr) {
            var str = typeof str === &#39;string&#39; ? str : str.toString(),
                ovl = this.get("ovl");
            this.set("type", "alert");
            ovl.find(".J_WinpopMain").html(str);
            if (typeof btnstr == "undefined") {
                ovl.find(".J_WinpopBtns").html(HTMLS.alert);
            } else {
                ovl.find(".J_WinpopBtns").html(btnstr);
            }
            this.show();
        },
        confirm: function(str, callback) {
            var str = typeof str === &#39;string&#39; ? str : str.toString(),
                ovl = this.get("ovl");
            this.set("type", "confirm");
            ovl.find(".J_WinpopMain").html(str);
            ovl.find(".J_WinpopBtns").html(HTMLS.confirm);
            this.set("confirmBack", (callback || function() {}));
            this.show();
        },
        show: function() {
            this.get("ovl").show();
            this.get("mask").show();
        },
        hide: function() {
            var ovl = this.get("ovl");
            ovl.find(".J_WinpopMain").html("");
            ovl.find(".J_WinpopBtns").html("");
            ovl.hide();
            this.get("mask").hide();
        },
        destory: function() {
            this.get("ovl").remove();
            this.get("mask").remove();
            delete window.alert;
            delete window.confirm;
        }
    };

    var obj = new Winpop();
    window.alert = function(str) {
        obj.alert.call(obj, str);
    };
    window.confirm = function(str, cb) {
        obj.confirm.call(obj, str, cb);
    };
})(window, jQuery);

Es gibt etwas mehr Code, aber die wichtigsten Punkte sind wie folgt:

  • Der Autor war faul und hat jQuery verwendet. Bitte stellen Sie sicher, dass jQuery eingeführt wurde.

  • Die benutzerdefinierte Komponentenstruktur wird schließlich an den Text angehängt Bevor Sie die oben genannten js einführen, stellen Sie bitte zunächst sicher, dass das Dokument geladen wurde

  • Die Komponente fügt die Funktion hinzu, ESC zu drücken und auf die Maskenebene zu klicken, um die Komponente auszublenden

  • Hinweis: In diesem Beispiel wird die Destory-Methode nicht verwendet, aber die Leser können darauf achten, window.alert und window.confirm in dieser Methode zu löschen Stellen Sie sicher, dass nach der Zerstörung der benutzerdefinierten Komponente die Warn- und Bestätigungssteuerelemente mit den integrierten Effekten des Browsers wiederhergestellt werden

  • Wenn Sie window.Winpop = Winpop am Ende der Komponente hinzufügen, Das Objekt kann globalisiert werden, damit es von anderen Klassen aufgerufen werden kann

Endlich

Als Front-End-Entwicklungsingenieur halte ich persönlich die Entwicklung von Javascript-Komponenten für eine sehr interessante Sache. Und der Spaß kann nur realisiert werden, wenn man es selbst versucht. Die Entwicklung von Frontend-Komponenten erfordert oft die Zusammenarbeit von Javascript, CSS und HTML, um mit halbem Aufwand das Doppelte zu erzielen. Das oben erwähnte Winpop stellt Ihnen hier ein komplettes Demo-Komprimierungspaket zur Verfügung das Wort.

Das Obige ist der Inhalt der Entwicklung einer vollständigen JavaScript-Komponente. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptVon Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptApr 22, 2025 am 12:02 AM

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichenPython gegen JavaScript: Anwendungsfälle und Anwendungen verglichenApr 21, 2025 am 12:01 AM

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

Die Rolle von C/C bei JavaScript -Dolmetschern und CompilernDie Rolle von C/C bei JavaScript -Dolmetschern und CompilernApr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

JavaScript in Aktion: Beispiele und Projekte in realer WeltJavaScript in Aktion: Beispiele und Projekte in realer WeltApr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

JavaScript und das Web: Kernfunktionalität und AnwendungsfälleJavaScript und das Web: Kernfunktionalität und AnwendungsfälleApr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python gegen JavaScript: Community, Bibliotheken und RessourcenPython gegen JavaScript: Community, Bibliotheken und RessourcenApr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.