JS erzielt Fünf-Sterne-Lobeffekt

JS erzielt Fünf-Sterne-Lobeffekt

Verwenden Sie JS, um objektorientierte Methoden zu implementieren und den Fünf-Sterne-Bewertungseffekt von JD.com zu erzielen.

Anzeige beim Überfahren mit der Maus:

Wenn die Auswertung abgeschlossen ist, schließen Sie den Browser und öffnen Sie die Seite erneut. Das letzte Auswertungsergebnis wird weiterhin angezeigt. Dies geschieht durch die Verwendung von Cookies.

Die konkrete Umsetzung sieht wie folgt aus:

importiere Componentet aus "./Component.js";
 
exportiere Standardklasse Stars erweitert Component {
 
    Etikett;
    STERNE_ANZAHL = 5;
    SternArr = [];
    Punktzahl = 0;
    SterneCon;
    Gesichtssymbol;
    PunktzahlCon;
    Index = -1;
    Name;
    
    static STARS_LIST={}; //Alle Fünf-Sterne-Bewertungsergebnisse auf der aktuellen Seite speichern, ein Produkt pro Gruppe. Verwenden Sie die Produkt-ID als Schlüssel und die Produktbewertungen, um ein Array als Wert zu bilden.
    Datum=neues Datum();
 
    Konstruktor(_label,_name) {
        super("div");
        dies.name=_name;
        dies.label = _label;
        Objekt.zuweisen(this.elem.style, {
            Breite: "200px",
            Höhe: "16px",
            float: "links",
            marginRight: "20px",
            Rand unten: "10px",
            Schriftgröße: "12px",
            Farbe: "#666",
            Zeilenhöhe: "16px",
            Benutzerauswahl: "keine",
            Position: "relativ",
            oben: "20px",
            links: "20px",
        })
        // Analysieren Sie die im Cookie gespeicherten Bewertungsergebnisse und initialisieren Sie den Bewertungswert beim Erstellen jeder Bewertung.
        dies.initScore();
        // Den Bewertungsbeschriftungsteil erstellen this.createLabel();
        // Den Teil mit den Sternen erstellen this.createStars();
        //Erstellen Sie den Punkteteil this.createScore();
        // Initialisieren Sie den Sternstil.
        dies.changeStarStyle(dieses.score-1);
        // Punktzahl initialisieren this.changeScore(this.score);
        //Maus-Rollover- und Klickereignisse hinzufügen.
        this.starsCon.addEventListener("mouseenter", e => this.mouseHandler(e));
        this.starsCon.addEventListener("mouseleave", e => this.mouseHandler(e));
        this.starsCon.addEventListener("mouseover", e => this.mouseHandler(e));
        this.starsCon.addEventListener("klicken", e => this.clickHandler(e));
        dieses.date.setFullYear(2021);
    }
    anhängenAn(_parent){
        super.appendTo(_parent);
        wenn(!Stars.STARS_LIST[dieser.name]) Stars.STARS_LIST[dieser.name]=[];
        Sterne.STARS_LIST[dieser.name].push(dieses.label+"="+dieser.score);
    }
    KlickHandler(e){
        wenn(e.target.constructor!==HTMLLIElement) return
        dies.index = dies.starArr.indexOf(e.target);
        dieser.Score = dieser.Index+1;
        dies.changeStarStyle(dieser.index);
        dies.changeScore(dieses.index+1);
        // Bei jedem Klick wird das Ergebnis des Kommentars im Cookie gespeichert, sodass es beim nächsten Öffnen der Seite gelesen werden kann. STARS_LIST speichert Daten mit Label als Schlüssel und Score als Wert.
        dies.storageScore();
    }
    Speicherscore(){
        für (let-Eigenschaft in Stars.STARS_LIST) {
            wenn(prop === dieser.name){
                Sterne.STARS_LIST[prop].forEach((item,index)=>{
                    wenn (item.includes(this.label)) Sterne.STARS_LIST[prop][index] = this.label+"="+this.score;
                });
            }
        }
        document.cookie="comment="+ JSON.stringify(Stars.STARS_LIST)+";expires="+this.date.toUTCString();
    }
    MausHandler(e) {
        Schalter (e.Typ) {
            Fall "mouseenter":
                this.faceIcon.style.display = "Block";
                brechen;
            Fall "Mausblatt":
                this.faceIcon.style.display = "keine";
                dies.changeStarStyle(dieser.index);
                dies.changeScore(dieses.score);
                brechen;
            Fall „Mouseover“:
                let index = this.starArr.indexOf(e.target);
                dies.changeStarStyle(index);
                dies.changeScore(index + 1);
                dies.changeFaceStyle(index);
                brechen;
        }
    }
    ändereSternstil(_i) {
        für (lass n = 0; n < this.starArr.length; n++) {
            wenn (n <= _i || n < dieser.Score) {
                this.starArr[n].style.backgroundPositionY = "-16px";
            } anders {
                this.starArr[n].style.backgroundPositionY = "0px";
            }
        }
    }
    ändereGesichtsstil(_i) {
        dieses.faceIcon.style.left = _i * 16 + "px";
        this.faceIcon.style.backgroundPositionX = (_i + 1) * 20 + "px";
    }
    änderePunktzahl(_i) {
        this.scoreCon.textContent = _i + "Punkte";
    }
    Label erstellen() {
        let label = document.createElement("span");
        Objekt.zuweisen(Beschriftung.Stil, {
            float: "links",
            Polsterung: "0 5px",
        })
        label.textinhalt = dieses.label;
        dies.elem.appendChild(Bezeichnung);
    }
    erstelleSterne() {
        this.starsCon = document.createElement("ul");
        Objekt.assign(this.starsCon.style, {
            Rand: 0,
            Polsterung: 0,
            Listenstil: "keine",
            Breite: "80px",
            Höhe: "16px",
            float: "links",
            Position: "relativ",
        })
        für (lass i = 0; i < this.STARS_NUM; i++) {
            let li = document.createElement("li");
            Objekt.assign(li.style, {
                Breite: "16px",
                Höhe: "16px",
                float: "links",
                Hintergrundbild: "url(./star_img/commstar.png)",
            })
            dies.starArr.push(li);
            dies.starsCon.appendChild(li);
        }
        dies.faceIcon = document.createElement("div");
        Objekt.zuweisen(this.faceIcon.style, {
            Breite: "16px",
            Höhe: "16px",
            Hintergrundbild: "url(./star_img/face-red.png)",
            HintergrundPositionX: "-80px",
            Position: "absolut",
            links: "0",
            oben: "-16px",
            Anzeige: "keine",
        })
        dies.starsCon.appendChild(dieses.faceIcon);
        dies.elem.appendChild(dies.starsCon);
    }
    erstelleScore() {
        dies.scoreCon = document.createElement("div");
        Objekt.zuweisen(this.scoreCon.style, {
            Höhe: "16px",
            Breite: "20px",
            float: "links",
            Polsterung: "0 5px",
        })
        this.scoreCon.textContent = this.score + "Text",
        dies.elem.appendChild(dies.scoreCon);
    }
    initScore(){
        // Lesen Sie das Cookie direkt, um es wie folgt anzuzeigen // Kommentar = {"1001": ["Produktkonformität = 5","Shop-Service-Einstellung = 0","Express-Liefergeschwindigkeit = 0","Kurierdienst = 0","Express-Verpackung = 0"],"1002": ["Produktkonformität = 0","Shop-Service-Einstellung = 0","Express-Liefergeschwindigkeit = 0","Kurierdienst = 0","Express-Verpackung = 0"]}
 
        // Analysieren Sie die im Cookie gespeicherten Kommentarergebnisse.
        wenn(!document.cookie.includes("comment=")) return
        lass o = JSON.parse(document.cookie.match(/(\{.*?\})/)[1]);
        wenn(!o) zurückgeben
        // Das analysierte o lautet wie folgt // ["Produktkonformität=1", "Shop-Service-Einstellung=0", "Express-Liefergeschwindigkeit=0", "Kurierdienst=0", "Express-Verpackung=0"]
        für (let prop in o) {
            wenn(dieser.name===prop){
                this.score=o[prop].reduce((Wert,Element,Index)=>{
                    lass arr = item.split("=");
                    wenn(arr[0].includes(this.label)) Wert=parseInt(arr[1]);
                    Rückgabewert;
                },0)
            }
        }
    }
}

Übergeben Sie bei Verwendung das Tag und erstellen Sie eine neue Instanz.

importiere Sterne aus „./js/Stars.js“;
let list=["Produktkonformität","Serviceeinstellung des Ladenbesitzers","Express-Liefergeschwindigkeit","Kurierdienst","Express-Verpackung"];
 
        // lass Stern = neue Sterne(Liste[0]);
        // Stern.appendTo("body");
 
        Liste.fürJeden(Element=>{
            // Geben Sie das Label und die entsprechende Produkt-ID ein
            let star = neue Sterne(Artikel,"1001");
            Stern.appendTo(".div1");
        })
        Liste.fürJeden(Element=>{
            let star = neue Sterne(Artikel,"1002");
            Stern.appendTo(".div2");
        })

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:
  • JS erhält Fünf-Sterne-Lob
  • JavaScript implementiert Fünf-Sterne-Produktbewertung
  • Implementieren Sie Fünf-Sterne-Bewertungen auf Basis von jQuery
  • Fünf-Sterne-Bewertungsfunktion implementiert durch jQuery [Fall]
  • jQuery-Methode zum Imitieren der Fünf-Sterne-Bewertungsfunktion basierend auf Ebenen
  • js realisiert die Fünf-Sterne-Bewertungsfunktion
  • JavaScript zur Realisierung der Fünf-Sterne-Bewertungsfunktion
  • JavaScript zur Implementierung des Fünf-Sterne-Bewertungscodes (Quellcode-Download)
  • JS und JQuery realisieren jeweils Taobao Fünf-Sterne-Lob-Spezialeffekte

<<:  Erläuterung der MySQL-Indexoptimierung

>>:  Eine kurze Analyse der Verwendung der Zero-Copy-Technologie in Linux

Artikel empfehlen

Unterscheidung zwischen Linux-Hardlinks und Softlinks

Unter Linux gibt es zwei Arten von Dateiverbindun...

Die Verbindung zwischen JavaScript und TypeScript

Inhaltsverzeichnis 1. Was ist JavaScript? 2. Wofü...

Detaillierte Erklärung zum Abrufen der IP-Adresse eines Docker-Containers

1. Nach dem Betreten des Containers Katze /etc/ho...

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...

Zusammenfassung der Unterschiede zwischen Get- und Post-Anfragen in Vue

Die Betriebsumgebung dieses Tutorials: Windows 7-...

Detaillierte Erklärung gängiger Docker-Befehle

1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...

Zusammenfassung der praktischen Methoden von CSS3 (empfohlen)

1. Abgerundeter Rand: CSS- CodeInhalt in die Zwis...

MySQL 5.7.18 Installations-Tutorial und Problemübersicht

MySQL 5.7.18 Installation und Problemübersicht. I...

Eine kurze Diskussion darüber, ob CSS das Rendern von Seiten blockiert

Vielleicht weiß jeder, dass die JS-Ausführung die...

Grundlegende Anweisungen der MySQL-Datendefinitionssprache DDL

MySQL DDL-Anweisungen Was ist DDL, DML. DDL ist e...

MySQL max_allowed_packet-Einstellung

max_allowed_packet ist ein Parameter in MySQL, de...

Vue implementiert die Funktion zum Aufrufen der Handykamera und des Albums

In diesem Artikel wird der spezifische Code von V...

Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Hintergrund Ehe wir uns versehen, neigt sich ein ...

Perfekte Lösung für das Problem des CSS-Hintergrundbildpfads im Webpack

Innerhalb des Style-Tags der Vue-Komponente befin...

Exquisiter Snake-Implementierungsprozess in JavaScript

Inhaltsverzeichnis 1. HTML-Struktur erstellen 2. ...