DesignabsichtenBeim Entwickeln einer Seite müssen Sie beim Klicken auf das Navigationsmenü auf der Seite häufig zur entsprechenden Position scrollen und durch die Seite scrollen, um die Menüoptionen hervorzuheben. In der HTML-Entwicklung können wir die A-Tag-Ankerimplementierung verwenden und sie mit einer JQ-Animation kombinieren, um einen ähnlichen Effekt zu erzielen. Im Rahmen dessen erzielt das Vant UI Framework diesen Effekt auch für uns. Wie implementiere ich ein WeChat-Miniprogramm? ? Effektanzeige
Gestaltungsideen1. Realisierung des Deckeneffekts
1) Entfernung const query = wx.createSelectorQuery() Abfrage.Auswahl('.menu_nav').boundingClientRect(Funktion(res) { let obj = {} wenn (res && res.top) { obj[item.attr] = parseInt(res.top) } }).exec()
Selektorsyntax
Eigenschaft Typ Beschreibung id Zeichenfolge ID des Knotens Datensatz Objekt Datensatz des Knotens left Nummer linke Grenzkoordinate des Knotens right Nummer rechte Grenzkoordinate des Knotens top Nummer obere Grenzkoordinate des Knotens bottom Nummer untere Grenzkoordinate des Knotens width Nummer Breite des Knotens height Nummer Höhe des Knotens
2) Seiten-Scroll-Überwachung
// Auf Seiten-Scrollen achten onPageScroll: function(e) { lass hTop = parseInt(e.scrollTop) // Muss das Menü oben positioniert werden? if (hTop > this.data.menu_top) { dies.setData({ tabFixed: true }) } anders { dies.setData({ tabFixed: false }) } } onPageScroll(Objektobjekt)) ParametersObject-Objekt:
Hinweis: Bitte definieren Sie diese Methode auf der Seite nur, wenn es notwendig ist, und definieren Sie keine leere Methode. Um die Auswirkungen unnötiger Ereignisverteilungen auf die Kommunikation zwischen Rendering-Layer und Logik-Layer zu reduzieren. Hinweis: Vermeiden Sie es, Vorgänge wie „setData“ zu häufig in „onPageScroll“ auszuführen, da dies zu einer Kommunikation zwischen der Logikebene und der Renderingebene führen kann. Insbesondere wenn jedes Mal eine große Datenmenge übertragen wird, wirkt sich dies auf die Kommunikationszeit aus. 2. Wechseln Sie in den entsprechenden Bereich
// Einstellungen für den Navigationsleistenschalter setSelectType(event) { let index = Ereignis.aktuellesTarget.dataset.type dies.setData({ tabIndex: Index, }) let arr = ['Panel1_oben', 'Panel2_oben', 'Panel3_oben', 'Panel4_oben'] lass _dies = dies wx.pageScrollTo({ scrollTop: _this.data[arr[index]], Dauer: 500 }) }, wx.pageScrollTo(Objektobjekt)
3) Wenn Sie zu einem bestimmten Bereich scrollen, wird die Menüschaltfläche des entsprechenden Bereichs hervorgehoben Ermitteln Sie den anfänglichen Abstand zwischen der Fläche und der Spitze lass arr = [ { Name: '.menu-nav', Attr: 'menu_top', AddNum: 0 }, { Name: '.panel1', Attr: 'panel1_top', AddNum: 0 }, { Name: '.panel2', Attr: 'panel2_top', AddNum: 0 }, { Name: '.panel3', Attr: 'panel3_top', AddNum: 0 }, { Name: '.panel4', Attr: 'panel4_top', AddNum: 0 }, ] arr.forEach((item, i) => { wx.createSelectorQuery().select(item.name).boundingClientRect(function(res) { let obj = {} wenn (res && res.top) { obj[item.attr] = parseInt(res.top) wenn (Artikel.AddNum) { obj[item.attr] += item.addNum } dass.setData({ ...obj }) } }).exec() }) Überprüfen Sie, ob das Scrollen den Bereich überschreitet // Auf Seiten-Scrollen achten onPageScroll: function(e) { lass hTop = parseInt(e.scrollTop) // Menü automatisch wechseln let tab=0 wenn (hTop >= (this.data['panel4_top'] - this.data.menu_top)) { tab=3 }sonst wenn (hTop >= (this.data['panel3_top'] - this.data.menu_top)){ tab=2 } sonst wenn (hTop >= (this.data['panel2_top'] - this.data.menu_top)){ tab=1 } dies.setData({ tabIndex: Registerkarte, }) }, Vollständiger Code index.js // Seiten/index/index.js Seite({ /** * Ausgangsdaten der Seite */ Daten: { tabIndex: 0, // Aktuelles Menü menuList: ['Menü 1', 'Menü 2', 'Menü 3', 'Menü 4'], // Navigationsmenü tabFixed: false, // Ob positioniert werden soll// Der Abstand vom oberen Rand der Startseite menu_top: 0, panel1_top: 0, panel2_top: 0, panel3_top: 0, panel4_top: 0, }, /** * Lebenszyklusfunktion - auf Seitenladen warten*/ onLoad: Funktion (Optionen) { }, onShow:Funktion (Optionen){ dies.getTopDistance() }, // Höhe vom oberen Rand der Seite ermitteln getTopDistance() { lass das = dies lass arr = [{ Name: '.menu-nav', attr: 'Menü oben', Zusatznummer: 0 }, { Name: '.panel1', attr: 'panel1_top', Zusatznummer: 0 }, { Name: '.panel2', attr: 'panel2_top', Zusatznummer: 0 }, { Name: '.panel3', attr: 'panel3_top', Zusatznummer: 0 }, { Name: '.panel4', attr: 'panel4_top', Zusatznummer: 0 }, ] arr.forEach((item, i) => { wx.createSelectorQuery().select(item.name).boundingClientRect(Funktion (res) { let obj = {} wenn (res && res.top) { obj[item.attr] = parseInt(res.top) wenn (Artikel.AddNum) { obj[item.attr] += item.addNum } dass.setData({ ...obj }) } }).exec() }) }, // Einstellungen für den Navigationsleistenschalter setSelectType(event) { let index = Ereignis.aktuellesTarget.dataset.type dies.setData({ tabIndex: Index, }) let arr = ['Panel1_oben', 'Panel2_oben', 'Panel3_oben', 'Panel4_oben'] lass _dies = dies wx.pageScrollTo({ scrollTop: _this.data[arr[index]], Dauer: 500 }) }, // Auf Seiten-Scrollen achten onPageScroll: function (e) { lass hTop = parseInt(e.scrollTop) // Muss das Menü oben positioniert werden? if (hTop > this.data.menu_top) { dies.setData({ tabFixed: true }) } anders { dies.setData({ tabFixed: false }) } // Menü automatisch wechseln, wenn (hTop >= (this.data['panel4_top'] - this.data.menu_top)) { dies.setData({ tabIndex: 3, }) }sonst wenn (hTop >= (this.data['panel3_top'] - this.data.menu_top)){ dies.setData({ tabIndex: 2, }) } sonst wenn (hTop >= (this.data['panel2_top'] - this.data.menu_top)){ dies.setData({ tabIndex: 1, }) }anders{ dies.setData({ tabIndex: 0, }) } }, }) index.wxml <Ansichtsklasse="Main"> <Klasse anzeigen="Kopf"> Ich bin der Kopfbereich</view> <view class="{{tabFixed?'is-fixed':''}} Menü-Navigation"> <text wx:for="{{menuList}}" class="{{tabIndex==index?'is-select':''}}" bind:tap="setSelectType" data-type='{{index}}'>{{item}}</text> </Ansicht> <Klasse anzeigen="Inhalt"> <view class="panel1 panel">Seite 1</view> <view class="panel2 panel">Seite 2</view> <view class="panel3 panel">Seite 3</view> <view class="panel4 panel">Seite 4</view> </Ansicht> </Ansicht> index.wxss .Menü-Navigation { Anzeige: Flex; Elemente ausrichten: zentrieren; Inhalt ausrichten: Abstand herum; Farbe: Schwarz; Polsterung: 10px 0; Breite: 100 %; Hintergrundfarbe: weiß; } .ist-Auswahl { Farbe: rot; } .Kopf { Anzeige: Flex; Elemente ausrichten: zentrieren; Inhalt ausrichten: zentriert; Schriftgröße: 40px; Höhe: 120px; Hintergrundfarbe: grüngelb; } .ist behoben { Position: fest; oben: 0; } .Panel { Anzeige: Flex; Elemente ausrichten: zentrieren; Inhalt ausrichten: zentriert; Schriftgröße: 20px; } .panel1 { Höhe: 800rpx; Hintergrundfarbe: Rebeccapurple; } .panel2 { Höhe: 700rpx; Hintergrundfarbe: blau; } .panel3 { Höhe: 1000rpx; Hintergrundfarbe: orange; } .panel4 { Höhe: 1200rpx; Hintergrundfarbe: rosa; } Dies ist das Ende dieses Artikels über das WeChat Mini-Programm – Angepasste Menünavigation (Realisierung des Treppeneffekts). Weitere relevante Inhalte zur angepassten Menünavigation des WeChat Mini-Programms finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: So konvertieren Sie Chinesisch in HTML in UTF-8
<br />Ein toller Blogbeitrag von PPK vor zwe...
Inhaltsverzeichnis 1. Verwandte Binlog-Konfigurat...
Das Boxmodell gibt die Breite und Höhe sowie die ...
SMIL fügt Unterstützung für Timing und Mediensync...
Ich habe kürzlich die Entwicklung kleiner Program...
Vorherige Wörter Zeilenhöhe, Schriftgröße und vert...
Hinweis: Es wird empfohlen, dass der Speicher der...
1. Nehmen Sie nginx als Beispiel Nginx mit dem Be...
Inhaltsverzeichnis Definition Struktur Beispiele ...
1. Ursache: Ich muss eine SQL-Datei importieren, ...
1. Verwenden Sie auf einem vernetzten Computer di...
Schauen wir uns zunächst den Code an: ALTER TABLE...
Inhaltsverzeichnis 1. for-Schleife 2. Doppelte fo...
Erstellen Sie eine neue Konfigurationsdatei (gehe...
Unter Linux wird Bash als Standard übernommen, wa...