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
MySQL Master-Slave-Konfiguration 1. Vorbereitung ...
Vorwort Es ist ein Klischee. Hier werde ich über ...
Kubernetes unterstützt drei Arten der Authentifiz...
Inhaltsverzeichnis Hintergrund Zweck Vor der Spal...
Das Problem beim Zurücksetzen des Passworts für d...
Das Div-Element wird verwendet, um Struktur und Hi...
Die virtuelle Maschine wird verwendet oder es kan...
In diesem Artikel finden Sie das Installations-Tu...
Inhaltsverzeichnis Verwendung von CURRENT_TIMESTA...
[LeetCode] 181.Mitarbeiter verdienen mehr als ihr...
a- und href-Attribute HTML verwendet <a> zu...
1. Erstellen Sie ein Konfigurationsdateiverzeichn...
Virtualisierung 1. Umwelt Centos7.3 Deaktivieren ...
In diesem Artikel wird die Installations- und Kon...
Ideen Eigentlich ist es ganz einfach Schreiben Si...