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.
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
Ich habe vor Kurzem VMware Horizon bereitgestellt...
Zählskript #!/bin/sh AnzahlArgs=$# wenn [ $numOfA...
DOKTYP Doctype wird verwendet, um dem Browser mit...
Inhaltsverzeichnis Überblick Erfordern URL der An...
Überblick In einer Datenbank wird ein Index verwe...
Wenn Sie MySQL zum ersten Mal auf Ihrem Computer ...
Vorwort Nachdem ich lange Zeit verschiedene Mater...
https://docs.microsoft.com/en-us/windows/wsl/wsl-...
Sie können problemlos Chinesisch eingeben und im ...
Es gibt drei Hauptmethoden der MySQL-Replikation:...
Festlegen des MySQL-Root-Passworts Melden Sie sic...
Das mit JavaScript-Objekten und -Methoden impleme...
Als ich kürzlich CSS studierte, stellte ich fest,...
//Standardprotokoll /Die Verwendung des Standardp...
Installationsvorschlag : Versuchen Sie, für die I...