1. Komponenteneinführung Affixierungskomponenten werden verwendet, um Seitenelemente in einem bestimmten visuellen Bereich zu fixieren. 1.1 Eigenschaften
1.2 Veranstaltungen
2. Quellcode-Analyse 2.1 Vorlage<Vorlage> <div ref="root" Klasse="el-affix" :style="rootStyle"> <div :class="{'el-affix--fixed': state.fixed}" :style="affixStyle"> <Steckplatz></Steckplatz> </div> </div> </Vorlage> Der Vorlagenteil ist sehr einfach und empfängt Inhalte über den Slot 2.2 Skript// Bei einigen Kerncodes wird die Codereihenfolge angepasst setup(props, { emit }) { // Zielcontainer-Referenz const Ziel = ref(null) // Ref reparieren und mit dem Ref-Attribut in der Vorlage zusammenarbeiten, um das HTML-Element const root = ref(null) zu erhalten. // Scroll-Container-Referenz const scrollContainer = ref(null) // Fester Zustand const state = reactive({ behoben: falsch, Höhe: 0, // Höhe der Wurzel width: 0, // Breite der Wurzel scrollTop: 0, // ScrollTop des Dokumentelements clientHeight: 0, // Clienthöhe des Dokumentelements transformieren: 0, }) beimMounted(() => { // Bestimmen Sie den Zielcontainer basierend auf dem eingehenden Ziel, wenn (props.target) { Zielwert = Dokument.Abfrageselektor(Eigenschaften.Ziel) wenn (!ziel.wert) { neuen Fehler werfen („Ziel existiert nicht: ${props.target}“) } } anders { Zielwert = Dokument.Dokumentelement } // Finde den Scroll-Container nach oben, basierend auf dem festen Element scrollContainer.value = getScrollContainer(root.value) // Auf das Scroll-Ereignis des Scroll-Containers warten on(scrollContainer.value, 'scroll', onScroll) // Auf das Größenänderungsereignis des festen Elements warten addResizeListener(root.value, updateState) }) // Die Antwortfunktion des Scroll-Ereignisses des Scroll-Containers const onScroll = () => { // Den festen Status aktualisieren updateState() emittieren('scrollen', { scrollTop: Zustand.scrollTop, behoben: status.behoben, }) } // Aktualisieren Sie die feste Statusfunktion const updateState = () => { const rootRect = root.value.getBoundingClientRect() const targetRect = target.value.getBoundingClientRect() Zustandshöhe = Wurzelrechteckhöhe Zustand.Breite = rootRect.Breite state.scrollTop = scrollContainer.value === Fenster ? document.documentElement.scrollTop : scrollContainer.value.scrollTop Zustand.Clienthöhe = Dokument.Dokumentelement.Clienthöhe wenn (Eigenschaften.Position === 'oben') { wenn (Eigenschaften.Ziel) { Konstante Differenz = Zielrechteck.unten - Eigenschaften.Offset - Zustand.Höhe // targetRect.bottom > 0 bedeutet, dass der feste Pin immer im Container bleibt und ausgeblendet wird, wenn er den Bereich überschreitet state.fixed = props.offset > rootRect.top && targetRect.bottom > 0 // Wird verwendet, um das Szenario zu handhaben: Wenn während des Scrollvorgangs der sichtbare Bereich des Zielcontainers nicht ausreicht, um den gesamten Pin anzuzeigen, sollte der Pin entsprechend versetzt werden, um nur einen Teil davon anzuzeigen. state.transform = difference < 0 ? difference : 0 } anders { Zustand.fest = Eigenschaften.Offset > rootRect.top } } anders { wenn (Eigenschaften.Ziel) { Konstante Differenz = Zustand.Clienthöhe - Zielrechteck.oben - Eigenschaften.Offset - Zustand.Höhe state.fixed = state.clientHeight - props.offset < rootRect.bottom und state.clientHeight > targetRect.top Zustand.Transformation = Differenz < 0? -Differenz: 0 } anders { Zustand.fixiert = Zustand.Clienthöhe - Eigenschaften.Offset < rootRect.bottom } } } // Überwachen Sie die feste Statusänderung und geben Sie Änderungsereignisse aus watch(() => state.fixed, () => { emittieren('ändern', Status.behoben) }) // Berechnen Sie die Eigenschaft und aktualisieren Sie den Stil des Nagels automatisch entsprechend dem Zustand des Nagels const affixStyle = computed(() => { wenn (!state.fixiert) { zurückkehren } const offset = props.offset ? `${props.offset}px` : 0 const transform = state.transform ? `translateY(${state.transform}px)` : '' zurückkehren { Höhe: `${state.height}px`, Breite: `${state.width}px`, oben: props.position === 'oben'? Offset: '', unten: props.position === 'unten'? Offset: '', transformieren: transformieren, zIndex: props.zIndex, } }) } 2.3 Zusammenfassung der Umsetzung:
Dies ist das Ende dieses Artikels über die Implementierung von Affix-Pinning durch Element Plus. Weitere relevante Inhalte zum Element-Affix-Pinning finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL
>>: VMware- und CentOS-Systeminstallationsmethode zum Zurücksetzen des Root-Passworts
Inhaltsverzeichnis 1. Startverwaltung des Quellpa...
1. Lösung 1.1 Beschreibung des Schnittstellenkont...
In diesem Artikel erfahren Sie mehr über die Inst...
Dieser Artikel stellt hauptsächlich die dynamisch...
1. Einleitung In letzter Zeit erlebe ich es oft, ...
Der Befehl „show processlist“ ist sehr nützlich. ...
Seit kurzem ist https auch auf dem Handy möglich....
Inhaltsverzeichnis 1. Unterschiede zwischen Optio...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
In diesem Artikelbeispiel wird der spezifische Co...
Vorwort: Wie erhält man die Koordinaten der aktue...
Nach der Installation von CentOS 8 wird beim Neus...
Vorteile eines programmatischen Ansatzes 1. Globa...
Bevor wir beginnen, erstellen wir zwei Tabellen, ...
Inhaltsverzeichnis 1. Behandeln Sie Objekte nicht...