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
0. Vorbereitende Maßnahmen Deaktivieren Sie den s...
1. Vorbereitung 1.1 Laden Sie VMware 15 herunter ...
Inhaltsverzeichnis 1. Einführung in die PID-Datei...
Inhaltsverzeichnis 1. Numerischer Typ 1.1 Klassif...
1. Es gibt im Allgemeinen zwei Methoden zur Steue...
Vorwort Als ich heute auf GitHub gestöbert habe, ...
Dieser Artikel stellt hauptsächlich die Lösung fü...
Der erste Schritt besteht darin, TypeScript globa...
1. Zwei Eigenschaften des Tabellen-Resets: ①borde...
MySQL-Installationstutorial für Windows-Systeme h...
1 Einführung in HTML 1.1 Erste Erfahrungen mit Co...
Inhaltsverzeichnis Vorwort Funktionale React-Komp...
Mysql-Abfragezeitraum-Schnittmenge Anwendungsszen...
1. Einleitung CentOS8-Systemupdate, die neue Vers...
Dies ist die Stilempfehlung der W3C-Organisation f...