Lernen Sie, wie Sie in 2 Minuten ein kreisförmiges/fächerförmiges Menü erstellen (Basisversion)

Lernen Sie, wie Sie in 2 Minuten ein kreisförmiges/fächerförmiges Menü erstellen (Basisversion)

Vorwort

Für das Projekt ist ein kreisförmiges Menü erforderlich. Ich habe online danach gesucht, aber kein passendes gefunden, also habe ich selbst ein sehr einfaches geschrieben und werde es später optimieren.

Diese Komponente basiert auf React, aber das Prinzip ist dasselbe.

Der Expansionseffekt ist wie folgt:

erreichen

CSS (weniger)

@centerIconSize: 30px;

.flex(@justify: flex-start, @align: center) {
    Inhalt begründen: @justify;
    Elemente ausrichten: @align;
    Anzeige: Flex;
}
.Sektor-Menü-Wrapper {
    Position: relativ;
    Breite: @centerIconSize;
    Rand: automatisch;

    .center-Symbol {
        .flex(Mitte);
        Breite: @centerIconSize;
        Höhe: @centerIconSize;
        Randradius: 50 %;
        Hintergrund: rgba(0, 0, 0, 0,3);
        Farbe: weiß;
        Cursor: Zeiger;
    }

    .Sektor-Element {
        Position: absolut;
        .flex(Mitte);
        Breite: @centerIconSize;
        Höhe: @centerIconSize;
        Randradius: 50 %;
        Hintergrund: rgba(0, 0, 0, 0,3);
        Cursor: Zeiger;
        Farbe: weiß;
        oben: 0;
        links: 0;
        Übergang: alles linear 0,5 s;
        transformieren: übersetzen(0, 0);
        // Anzeige: keine;
        Sichtbarkeit: versteckt;
    }

    .Sektor-Liste {
        &.Sektorliste-aktiv {
            Übergang: alles linear 0,5 s;
            .Sektor-Element {
                .flex(Mitte);
                Übergang: alles linear 0,5 s;
                transformieren: übersetzen(0, 0);
                Sichtbarkeit: sichtbar;

                &:erstes-Kind {
                    transformieren: übersetzen(0, -@centerIconSize * 1,5);
                }
        
                &:n-tes-Kind(2) {
                    transformieren: übersetzen(-@centerIconSize * 1,5, 0);
                }
        
                &:n-tes-Kind(3) {
                    transformieren: übersetzen(0, @centerIconSize * 1,5);
                    
                }
            }
        }
    }
}

SektorMenu.js

importiere React von „react“;

exportiere Standardklasse SectorMenu erweitert React.Component {
    Zustand = {
        Richtung: 'links',
        SektorMenüSichtbar: false,
        centerIconSize: 30,
        SektorArtikelgröße: 30,
    }

    /**
     * Radialmenü anzeigen */
    Sektormenü anzeigen = () => {
        const { SektorMenuVisible } = dieser.Zustand;
        dies.setState({
            SektorMenüSichtbar: !SektorMenüSichtbar,
        })
    }

    beiKlick aufSectorMenuItem = (Index) => {
        const { sectorMenuItemFunctions } = this.props;
        wenn (!SectorMenuItemFunctions || Typ von (SectorMenuItemFunctions[Index]) !== 'Funktion') {
            zurückkehren;
        }
        SektorMenüelementFunktionen[index]();
    }

    getSectorJsx = () => {
        const { SektorMenuItems } = this.props;

        wenn (!sectorMenuItems || !Array.isArray(sectorMenuItems) || sectorMenuItems.length === 0) {
            zurückkehren;
        }

        const Stile = {};
        const { SektorMenuVisible } = dieser.Zustand;

        returniere SektorMenüElemente.map((Element, i) => {
            // const Stile = {
            // transformieren: übersetzen(0, -centerIconSize * 2);
            // };

            zurück (<div
                Klassenname = {`Sektorelement ${SektorMenuVisible && 'Sektorelement-aktiv'}`}
                Stil={Stile}
                beiKlick={() => this.onClickSectorMenuItem(i)}
                Schlüssel={i}
            >
                {Artikel}
            </div>)
        });
    }
    rendern() {
        const { SektorMenuVisible } = dieser.Zustand;
        zurückkehren (
            <div Klassenname = "Sektor-Menü-Wrapper">
                <div className="center-icon" onClick={this.showSectorMenu}>
                    {
                        SektorMenüSichtbar ? 'x' : '···'
                    }
                </div>
                <div className={`Sektorliste ${sectorMenuVisible && 'Sektorliste-active'}`}>
                    {this.getSectorJsx()}
                </div>
            </div>
        )
    }
}

Anruf

<SektorMenü
    SektorMenüelemente={['A1', 'A2', 'A3']}
    SektorMenuItemFunctions={[Funktion () {console.log(0)}, Funktion () {console.log(1)}, Funktion () {console.log(2)}]}
/>

erwarten

Ursprünglich wollte ich eine flexible Verteilung schreiben, bin aber bei der Berechnung der Position nicht weitergekommen. Die Projektzeit ist knapp, daher werde ich an einem anderen Tag Zeit finden, sie zu optimieren.

  1. Flexibles Layout des Sektormenüelements
  2. Flexible Anzeige der Sektormenüposition (links, rechts, oben, unten …)

Fallstricke

Die Übergangsanimation funktionierte erst, als mir klar wurde, dass es daran lag, dass ich in der Sektorelementklasse display:none verwendet hatte. Stattdessen musste ich einfach die Sichtbarkeitseigenschaft verwenden.

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.

<<:  So übergeben Sie den Wert des Auswahl-Dropdown-Felds an die ID, um den Code zu implementieren

>>:  So verwenden Sie React-Color zum Implementieren des Front-End-Farbwählers

Artikel empfehlen

So aktivieren Sie Flash in Windows Server 2016

Ich habe vor Kurzem VMware Horizon bereitgestellt...

Eine kurze Diskussion über HTML-Dokumenttypen und -Kodierung

DOKTYP Doctype wird verwendet, um dem Browser mit...

So entwickeln Sie eine Progressive Web App (PWA)

Inhaltsverzeichnis Überblick Erfordern URL der An...

Informationen zu WSL-Konfigurations- und Änderungsproblemen in Docker

https://docs.microsoft.com/en-us/windows/wsl/wsl-...

So geben Sie chinesische Zeichen im Linux-Kernel aus

Sie können problemlos Chinesisch eingeben und im ...

Detaillierte Analyse des binlog_format-Modus und der Konfiguration in MySQL

Es gibt drei Hauptmethoden der MySQL-Replikation:...

Zusammenfassung gängiger MySQL-Befehle

Festlegen des MySQL-Root-Passworts Melden Sie sic...

Javascript implementiert die Webversion des Flipperspiels

Das mit JavaScript-Objekten und -Methoden impleme...

MySQL 8.0.21-Installationstutorial unter Windows-System (Abbildung und Text)

Installationsvorschlag : Versuchen Sie, für die I...