In tatsächlichen Projekten befinden sich die Bildlaufleisten nach oben und unten sowie nach links und rechts nicht innerhalb eines DIV. Daher ist die rechte Bildlaufleiste in manchen Fällen nicht sichtbar. Wir müssen jedoch zwei Bildlaufleisten im selben Ansichtsfenster anzeigen. Eine Lösung besteht darin, die Bildlaufleiste anzupassen und die ursprüngliche Bildlaufleiste auszublenden. Benutzerdefinierte Bildlaufleistenscrollbar.js importiere React, {Komponente} von „react“; PropTypes aus „Prop-Types“ importieren; importiere '../css/scrollbar.css'; const propTypes = { eventBus: PropTypes.object.isterforderlich, }; Klasse ScrollBar erweitert Komponente { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { isDraging: false, // X: unterer Scrollbar-Offset nach links, Bereich [0, innere Breite - 100]. Beim Ziehen ändert sich x x: null, // clickX gibt den Abstand von der linken Seite der Bildlaufleiste zur Mausklickposition beim Ziehen der Bildlaufleiste an, Bereich [0, 100], beim Ziehen ändert sich clickX nicht KlickX: 0, }; } componentDidMount() { this.unsubscribeScrollToColumn = this.props.eventBus.subscribe('set-scrollbar-left', this.setScrollBarLeft); document.addEventListener('mouseup', this.onMouseUp); } componentWillUnmount() { this.unsubscribeScrollToColumn(); Dokument.removeEventListener('mouseup', this.onMouseUp); } /** * Diese Funktion behandelt die Verknüpfung (wenn die Schnittstelle scrollt, löst sie das Scrollen der Bildlaufleiste aus). Hier ist 100 die Breite der Bildlaufleiste*/ setScrollBarLeft = (leftRatio) => { // Wenn die untere Bildlaufleiste gezogen wird, kann die Bildlaufleiste nicht nach links gesetzt werden wenn (dieser.Zustand.istDraging) return; dies.setState({ x: (Fenster.innereBreite - 100) * linkesVerhältnis, }); } /** * Wenn die Maus gedrückt ist, beginnen Sie mit dem Ziehen und setzen Sie die aktuelle Position auf die anfängliche Ziehposition*/ handleMouseDown = (e) => { dies.setState({ isDraging: wahr, clickX: e.nativeEvent.offsetX, }); } /** * Wenn die Maus angehoben wird, beenden Sie das Ziehen und setzen Sie die aktuelle Klickposition auf 0 (ist das notwendig?) */ beiMausHoch = () => { wenn (dieser.Zustand.istZiehen) { setzeTimeout(() => { this.setState({ isDraging: false, clickX: 0 }); }, 100); } } /** * Beim Ziehen (Maus wird gedrückt und beginnt sich zu bewegen) wird die aktuelle Verschiebung abgerufen und der neue Versatz berechnet. * Hinweis: Sie können nach rechts und nach links scrollen. * Beim Ziehen sollte das aktuelle Verhältnis berechnet werden, und dann scrollt das Raster horizontal. * Das aktuelle Problem besteht darin, dass das Ziehen nicht ausgelöst werden kann, wenn sich die Maus beim Ziehen außerhalb der Bildlaufleiste bewegt. * */ beiMausbewegung = (e) => { e.persistent(); wenn (dieser.Zustand.istZiehen) { // Neue Distanz = ursprüngliche Distanz + (aktuelle Scrolldistanz - anfängliche Scrolldistanz) lass newX = dieser.Zustand.x + e.nativeEvent.offsetX - dieser.Zustand.klickX; newX = Math.min(newX, window.innerWidth - 100); // Der maximale Widerstand darf die rechte Grenze nicht überschreiten this.setState({ x: newX }); const leftRatio = newX / (Fenster.innereWidth - 100); } } renderBottomToolbar = () => { zurückkehren ( <div Klassenname = "Antiscroll-Bildlaufleiste, Antiscroll-Bildlaufleiste-horizontal, Antiscroll-Bildlaufleiste-angezeigt" Stil = {{transform: `translateX(${this.state.x}px)`}} ziehbar="true" beiMouseDown={this.handleMouseDown} beiMouseMove={this.onMouseMove} beiMouseUp={diese.beiMouseUp} ></div> ); } // todo: rightToolbar-Ereignis-Handle renderRightToolbar = () => { zurückkehren ( <div Klassenname = "Antiscroll-Bildlaufleiste, Antiscroll-Bildlaufleiste vertikal, Antiscroll-Bildlaufleiste angezeigt" ></div> ); } rendern() { zurückkehren ( <div id="scrollOverlay" className="antiscroll-wrap"> {this.renderBottomToolbar()} {this.renderRightToolbar()} </div> ); } } ScrollBar.propTypes = propTypes; Standard-ScrollBar exportieren; BildlaufleistenstilEntsprechende scrollbar.css #scrollOverlay { Anzeige: Inline-Block; Überlauf: versteckt; Position: fest; links: 0; rechts: 0; oben: 156px; unten: 0; Z-Index: 4; Zeigerereignisse: keine; Deckkraft: .7; } #scrollOverlay .antiscroll-scrollbar { Zeigerereignisse: auto; Z-Index: 2; Hintergrundfarbe: hsla (0,0 %, 0 %, 0,28); Box-Shadow: Einschub 0 0 0 1px hsl(0,0%,100%); Rahmenradius: 5px; } #scrollOverlay .antiscroll-scrollbar-horizontal { Höhe: 12px; Breite: 100px; Position: absolut; unten: 32px; } #scrollOverlay .antiscroll-scrollbar-vertical { Breite: 12px; Höhe: 100px; Position: absolut; rechts: 0; } /* Blende die Bildlaufleiste des ursprünglichen Bildlaufobjekts aus */ .react-demo::-webkit-scrollbar { Breite: 0; } Spezifische Verwendung der BildlaufleisteFür spezielle Anwendungen fügen wir diese Bildlaufleiste zum Grid hinzu Importiere ScrollBar aus „../components/scrollbar“. // Rasternatives Scrollen, Auslösen der Callback-Funktion onScroll = () => { // zu erledigen: Wenn die Clientbreite kleiner als die Innenbreite ist, untere Scrollleiste nicht anzeigen let scrollLeftRatio = this._scrollLeft / (Clientbreite - Fensterbreite); // Wenn das native DOM nach links oder rechts scrollt, holen Sie sich das aktuelle Scroll-Verhältnis (Offset/Gesamtbreite) und stellen Sie die Bildlaufleiste auf Scrollen ein. this.setScrollLeftRatio(scrollLeftRatio); } setScrollLeftRatio = (scrollLeftRatio) => { this.props.eventBus.dispatch('set-scrollbar-left', scrollLeftRatio); } // Übergeben Sie im ursprünglichen Bildlaufelement eventBus, um die Verarbeitung von Ereigniswerten zu erleichtern // <ScrollBar eventBus={this.props.eventBus}/> Es gibt auch viele Open-Source-Komponenten von Drittanbietern für benutzerdefinierte Bildlaufleisten. Wir bevorzugen die Verwendung von Bibliotheken von Drittanbietern, um sie zu implementieren (bei der Berechnung von Bildlaufleisten sind viele Überlegungen anzustellen). 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:
|
<<: Eine kurze Einführung in Linux-Umgebungsvariablendateien
Ziel Zeigen Sie eine der Daten im iostat-Befehl i...
Kurzanleitung Das Foreman-Installationsprogramm i...
Inhaltsverzeichnis 1. Was ist eine Fensterfunktio...
Umfassendes Verständnis des html.css-Überlaufs XM...
Veranstaltungsbeschreibung onactivate: Wird ausgel...
Ich habe das System vor einiger Zeit neu installi...
Vorwort Der Quellcode umfasst insgesamt nur mehr ...
Erfahren Sie mehr über ähnliche Methoden zum Ermi...
Wie unten dargestellt: Führen Sie hauptsächlich A...
Da der Einfluss des Unternehmens wächst und seine...
Inhaltsverzeichnis 3 Möglichkeiten zum Bereitstel...
Inhaltsverzeichnis 1. Finde den Spiegel 2. Laden ...
Das Standardspeicherverzeichnis von MySQL ist /va...
Inhaltsverzeichnis Überblick Erfordern URL der An...
1. Übersicht 1.1 Grundlegende Konzepte: Docker is...