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
Wir müssen oft die versteckten, transparenten und...
Im Projekt werden Sie auf benutzerdefinierte öffe...
Die meisten Leute haben schon einmal vom Konzept ...
1. Software-Download MySQL-Download und -Installa...
Vorwort Der This-Zeiger in JS hat Anfängern schon...
Vorwort Der Befehl mv ist die Abkürzung für move ...
Der Syntaxstil der CSS-Stilregel ist die Grundein...
Wir alle wissen, dass die standardmäßige MySQL-Da...
Da ich immer vscode zur Entwicklung von Front-End...
MySQL sauber deinstallieren. Persönlich getestet,...
Vorwort Crond ist ein Tool zur geplanten Ausführu...
Ein sehr häufiges Szenario in react -Projekten: c...
1. Installationsumgebung Hier finden Sie auch ein...
Inhaltsverzeichnis 1. Implementierung des Zählers...
Urteilssymbole werden in MySQL häufig verwendet, ...