In diesem Artikel wird der spezifische Code von React + ts zur Erzielung des sekundären Verknüpfungseffekts zu Ihrer Information freigegeben. Der spezifische Inhalt ist wie folgt .tsx-Dateien importiere { Komponente, createRef} aus 'react' importiere './index.less' Schnittstelle Status { oben: beliebig Schaltflächenliste: Schaltfläche[] Inhaltsliste: Inhalt[] ButtonIndex: Nummer } Schnittstelle Schaltfläche { ID: Zeichenfolge Text: Zeichenfolge } Schnittstelle Inhalt { ID: Zeichenfolge Text: Zeichenfolge Höhe: Zahl oben: Nummer } Schnittstelle Requisiten { } Klasse Treppen erweitert Komponente<Props, State>{ Linke Liste: Button[] RightList: Inhalt[] Kaiguan: Boolescher Wert rechts = createRef<HTMLDivElement>() links = erstelleRef<HTMLDivElement>() LeftTex = createRef<HTMLDivElement>() // oTop: Zahl | undefiniert Ansichtshöhe: Zahl | nicht definiert offHeight: Zahl | nicht definiert Linker Text = createRef<HTMLDivElement>() oben: Zahl | undefiniert oTop: Zahl | undefiniert Konstruktor(Requisiten: Requisiten) { super(Requisiten) dieser.Zustand = { Schaltflächenliste: [], Inhaltsliste: [], ButtonIndex: 0, oben: 0 } dies.LeftList = [] dies.RechteListe = [] dies.kaiguan = wahr this.oTop = 0 } componentDidMount() { dies.BtnList(20) diese.ConList(20) dies.setState({ ButtonList: diese.LeftList, Inhaltsliste: this.RightList }) } getRandom(m: Zahl, n: Zahl): Zahl { gibt parseInt zurück (`${Math.random() * (m - n) + n}`); } BtnList(n: Zahl) { für (sei i = 0; i < n; i++) { dies.LeftList.push({ ID: `a${i}`, Text: `Button${i}`, }); } } ConList(n: Zahl) { sei ConTop = 0; für (sei i = 0; i < n; i++) { Lassen Sie RandomHeight = this.getRandom(736, 1400); dies.RightList.push({ ID: `b${i}`, Text: `Titel${i}`, Höhe: Zufällige Höhe, oben: ConTop, }); ConTop += Zufällige Höhe; } } FnScroll() { // konsole.log(11) wenn (dies.richtig.aktuell) { dies.oTop = dies.right.current.scrollTop; wenn (dies.kaiguan) { // konsole.log(111) lass count = 0 für (var i = 0; i < dieser.Zustand.Inhaltsliste.Länge; i++) { wenn (dieses.oTop >= dieser.zustand.ContentList[i].top) { Anzahl = i } dies.setState({ ButtonIndex: Anzahl }) } // konsole.log(ButtonIndex,Anzahl) } } // eslint-nächste-Zeile deaktivieren wenn (dieses.oTop == dieser.Zustand.ContentList[dieser.Zustand.ButtonIndex].top) { dies.kaiguan = wahr; } } Fn(index: beliebig, ev: React.MouseEvent<HTMLDivElement>) { this.viewHeight = Dokument.documentElement.clientHeight / 2 let target = ev.target als HTMLDivElement dies.offHeight = ziel.offsetTop // konsole.log(diese.offHeight) wenn (diese.offHeight > diese.viewHeight) { wenn (dieses.LeftTex.current) { dies.LeftTex.current.scrollTo({ oben: this.offHeight - this.viewHeight - target.clientHeight / 2, Verhalten: "glatt", }) } // konsole.log(dieses.LeftTex.current) } // Konsole.log(diese.offHeight - diese.viewHeight - Ziel.clientHeight / 2) dies.kaiguan = falsch; // diese.offHeight = ev.target.offsetTop // konsole.log(ev.target) wenn (dies.richtig.aktuell) { dies.rechts.aktuelles.scrollen({ oben: diese.RechteListe[index].oben, Verhalten: "glatt", }); } dies.setState({ ButtonIndex: Index }) } ButtonIndex(index: Zahl) { wenn (Index >= 3) { wenn (dies.links.aktuell und dieser.Linkstext.aktuell) { this.left.current.scrollTop = (Index - 3) * this.Lefttext.current.offsetHeight; } } wenn (Index < 3) { wenn (dies.links.aktuell) { dies.left.current.scrollTop = 0; } } dies.setState({ ButtonIndex: Index }) } rendern() { let footList = dieser.Zustand.ButtonList zurückkehren ( <div> <div Klassenname = "Über"> <div Klassenname="scrollen"> <div Klassenname = "Box1" ref = "Box1"></div> <div Klassenname = "Box2" ref = "Box2"></div> <div Klassenname="scroll-con" ref="scroll-con"> <div Klassenname="links" ref={this.LeftTex}> <div Klassenname="links-con"> {footList.map((Element, Index) => <div onClick={this.Fn.bind(this, index)} ref={this.Lefttext} className={this.state.ButtonIndex === index ? "ac left-txt" : "left-txt"} key={item.id} > {item.text} </div> )} </div> </div> <div className="rechts" ref={diese.rechts} onScroll={diese.FnScroll.bind(diese)}> <div Klassenname="rechts-con"> <div Klassenname="right-txt" ref="right-txt"> {this.state.ContentList.map((item) => <div style={{ Höhe: item.height }} className="right-title" key={item.id}>{item.text} </div> )} </div> </div> </div> </div> </div> </div> </div> ) } } Standardtreppe exportieren .less-Dateien .scroll { Breite: 100vw; Höhe: 100vh; Überlauf-y: scrollen; .box1 { Höhe: 300px; Hintergrund: #000; Breite: 100 %; } .box2 { Höhe: 200px; Hintergrund: Tomate; Breite: 100 %; } .box3 { Position: -WebKit-Sticky; Position: klebrig; oben: 0; Höhe: 100px; Hintergrund: blassviolettrot; Z-Index: 999; Breite: 100 %; } .scroll-con { Breite: 100vw; Höhe: 100vh; Position: -WebKit-Sticky; Position: klebrig; oben: 100px; Anzeige: Flex; .links, .Rechts { Höhe: 100vh; Überlauf-y: scrollen; } .links { Breite: 20vw; .links-txt { Breite: 20vw; Höhe: 100px; Textausrichtung: zentriert; Zeilenhöhe: 100px; Hintergrund: rot; } .left-txt.ac { Hintergrund: Hellkoralle; Z-Index: 999; } } .Rechts { Breite: 80vw; .Rechtstitel { Breite: 100 %; Höhe: 5vh; Hintergrund: dunkelblau; Farbe: Aqua; Zeilenhöhe: 5vh; } } } } Zum Schluss fügen Sie den von Ihnen definierten Ordner zur Route hinzu Das Wirkungsdiagramm sieht wie folgt aus 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:
|
<<: Zusammenfassung gängiger Nginx-Techniken und Beispiele
>>: So deklarieren Sie einen Cursor in MySQL
Inhaltsverzeichnis 1. Funktionsbeschreibung 2. Üb...
Installieren Sie zunächst SSH in Linux. Nehmen Si...
Vorwort Je nach Projektbedarf wird Vue-Touch verw...
Frage Bei der Installation von Docker mithilfe de...
1. ref wird kopiert, die Ansicht wird aktualisier...
1. Installation 1. Herunterladen Gehen Sie zur of...
1. DOCTYPE ist unverzichtbar. Der Browser bestimm...
Die Implementierungsidee des Javascript-Spiels Sn...
Was ist ein Ansichtsfenster? Mobile Browser platz...
Inhaltsverzeichnis 1. Der magische Erweiterungsop...
In CSS werden Element-Tags entsprechend den unter...
<br />Zu jedem unserer Themen bespricht das ...
UCenter Home ist ein von Comsenz veröffentlichtes ...
Inhaltsverzeichnis 1. Übersicht 2. Parameter zum ...
Bemerkung: Die Datenmenge in diesem Artikel beträ...