亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

微信小程序?qū)崿F(xiàn)雙層嵌套菜單欄

 更新時間:2022年07月17日 08:45:02   作者:NamCat  
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)雙層嵌套菜單欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近在做的項目有這樣一個需求,也不太好描述,就是有兩個頂部菜單欄,每個二級菜單欄的item都有自己頁面,每個頁面都可以通過左右滑動來切換,第一個想到的實現(xiàn)方法就是雙層swiper嵌套,但想要達(dá)到一個聯(lián)動的效果還是有一點點復(fù)雜,去網(wǎng)上找了一圈也沒結(jié)果只好自己來搞一下了

先貼一下效果圖

1.先把第一層swiper框架搭好,需要能通過滑動和點擊切換頁面,基本方法可百度

2.在第一層的<swiper-item>中嵌入第二層的<swiper>,方法照舊

3.基本功能能實現(xiàn),問題也來了,如何實現(xiàn)第二層的<swiper-item>滑到盡頭時第一層的<swiper>能隨之改變,基本實現(xiàn)思路是通過綁定swiper組件的回調(diào)方法bindtransition獲取swiper-item的位移數(shù)據(jù),但是回調(diào)的數(shù)據(jù)并沒有swiper-item的下標(biāo),所以無法判定當(dāng)前滑動的swiper-item是否在邊緣,所以只能自己動腦筋了,方法就是在邊緣的swiper-item容器內(nèi)加一個充滿容器的view,并且綁定touch的相關(guān)方法,在方法內(nèi)設(shè)置是否越級翻頁的flag為true,當(dāng)然這個flag在js中默認(rèn)定義為false,有了這個flag再加上bindtransition的回調(diào)偏移量就能夠?qū)崿F(xiàn)越級翻頁了

4.思路上是沒問題的,但是寫完會發(fā)現(xiàn)有許許多多小bug,一不小心就會崩潰的那種,最后經(jīng)過不斷的調(diào)整和測試,崩潰是不會了,滑動也挺順暢的,下面貼完整代碼

wxml:

<view class="contain">
? <view class='tabbar'>
? ? <view class="tabbar_item {{swipeIndex==0 ? 'on' : ''}}" data-current='0' bindtap="swichNav">
? ? ? <view>item1</view>
? ? </view>
? ? <view class="tabbar_item {{swipeIndex==1 ? 'on' : ''}}" data-current='1' bindtap="swichNav">
? ? ? <view>item2</view>
? ? </view>
? ? <view class="tabbar_item {{swipeIndex==2 ? 'on' : ''}}" data-current='2' bindtap="swichNav">
? ? ? <view>item3</view>
? ? </view>
? ??
? </view>
? <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="overflow-y:hidden">
?
? ? <swiper-item>
? ? ? <view class="swiper1_top">
? ? ? ? <view class="swiper1_top_item {{itemIndex1==0 ? 'on' : ''}}" data-current1='0' bindtap="itemSwich1">child_item1.1</view>
? ? ? ? <view class="swiper1_top_item {{itemIndex1==1 ? 'on' : ''}}" data-current1='1' bindtap="itemSwich1">child_item1.2</view>
? ? ? </view>
? ? ? <swiper current="{{itemCurrent1}}" duration="300" bindchange="swiperItemChange1" bindtransition="swiperTrans">
? ? ? ? <swiper-item>
? ? ? ? ? child_item1.1的頁面
? ? ? ? </swiper-item>
? ? ? ? <swiper-item>
? ? ? ? ? <view style="width:100vw;height:100%" bindtouchmove="itemTouchRightMove" bindtouchend="itemTouchRightEnd" ?bindtouchcancel="itemTouchRightEnd">child_item1.2的頁面</view>
? ? ? ? </swiper-item>
? ? ? </swiper>
? ? </swiper-item>
?
?
? ? <swiper-item>
? ? ? <view class="swiper1_top">
? ? ? ? <view class="swiper1_top_item {{itemIndex2==0 ? 'on' : ''}}" data-current2='0' bindtap="itemSwich2">child_item2.1</view>
? ? ? ? <view class="swiper1_top_item {{itemIndex2==1 ? 'on' : ''}}" data-current2='1' bindtap="itemSwich2">child_item2.2</view>
? ? ? ? <view class="swiper1_top_item {{itemIndex2==2 ? 'on' : ''}}" data-current2='2' bindtap="itemSwich2">child_item2.3</view>
? ? ? </view>
? ? ? <swiper current="{{itemCurrent2}}" duration="300" bindchange="swiperItemChange2" bindtransition="swiperTrans">
? ? ? ? <swiper-item style="width:100vw;height:100%" bindtouchmove="itemTouchLeftMove" bindtouchend="itemTouchLeftEnd" bindtouchcancel="itemTouchLeftEnd">
? ? ? ? ? child_item2.1的頁面
? ? ? ? </swiper-item>
? ? ? ? <swiper-item>
? ? ? ? ? <view style="width:100vw;height:100%" >child_item2.2的頁面</view>
? ? ? ? </swiper-item>
? ? ? ? <swiper-item>
? ? ? ? ? <view style="width:100vw;height:100%" bindtouchmove="itemTouchRightMove" bindtouchend="itemTouchRightEnd" bindtouchcancel="itemTouchRightEnd">child_item2.3的頁面</view>
? ? ? ? </swiper-item>
? ? ? </swiper>
? ? </swiper-item>
?
?
? ? ?<swiper-item>
? ? ? <view class="swiper1_top">
? ? ? ? <view class="swiper1_top_item {{itemIndex3==0 ? 'on' : ''}}" data-current3='0' bindtap="itemSwich3">child_item3.1</view>
? ? ? ? <view class="swiper1_top_item {{itemIndex3==1 ? 'on' : ''}}" data-current3='1' bindtap="itemSwich3">child_item3.2</view>
? ? ? ? <view class="swiper1_top_item {{itemIndex3==2 ? 'on' : ''}}" data-current3='2' bindtap="itemSwich3">child_item3.3</view>
? ? ? </view>
? ? ? <swiper current="{{itemCurrent3}}" duration="300" bindchange="swiperItemChange3" bindtransition="swiperTrans">
? ? ? ? <swiper-item style="width:100vw;height:100%" bindtouchmove="itemTouchLeftMove" bindtouchend="itemTouchLeftEnd" bindtouchcancel="itemTouchLeftEnd">
? ? ? ? ? child_item3.1的頁面
? ? ? ? </swiper-item>
? ? ? ? <swiper-item>
? ? ? ? ? <view style="width:100vw;height:100%" >child_item3.2的頁面</view>
? ? ? ? </swiper-item>
? ? ? ? <swiper-item>
? ? ? ? ? <view style="width:100vw;height:100%" >child_item3.3的頁面</view>
? ? ? ? </swiper-item>
? ? ? </swiper>
? ? </swiper-item>
? </swiper>
</view>

wxss:

page {
? font-size: 3.5vw;
? height: 100%;
? width: 100%;
? display: flex;
? flex-direction: column;
}
swiper{
? height: 100%;
? width: 100%;
}
?
.contain {
? display: flex;
? flex-direction: column;
? flex: 1;
? height: 0;
}
?
.tabbar {
? height: 5vw;
? width: 100vw;
? display: flex;
? flex-direction: row;
? justify-content: space-around;
? border-bottom: 3px #dbdbdb solid;
? padding-bottom: 2vw;
}
?
.tabbar_item {
? display: flex;
? flex: 1;
? flex-direction: column;
? align-items: center;
}
?
.on {
? color: coral;
}
?
?
.swiper-box {
? display: flex;
? flex-direction: column;
? flex: 1;
? height: 0;
? width: 100%;
? overflow-x: hidden;
? overflow-y: scroll;
}
?
.swiper1_top {
? width: 100vw;
? display: flex;
? margin-left: 2vw;
? flex-direction: row;
? font-size: 4vw;
? align-items: center;
? background-color: white;
}
?
.swiper1_top_item {
? flex: 1;
? display: flex;
? justify-content: center;
? align-items: center;
? padding: 2.5vw 0;
}
.swiper1_contain {
? width: 100vw;
? height: 100%;
? display: flex;
? flex-direction: column;
? align-items: center;
}
.swiper1_item {
? margin-bottom: 3vw;
? width: 94vw;
}
.dir_row {
? display: flex;
? flex-direction: row;
}

js:

Page({
?
? /**
? ?* 頁面的初始數(shù)據(jù)
? ?*/
? data: {
? ? currentTab: 0,
? ? swipeIndex: 0,
? ? itemCurrent1: 0,
? ? itemIndex1: 0,
? ? itemCurrent2: 0,
? ? itemIndex2: 0,
? ? itemCurrent3: 0,
? ? itemIndex3: 0,
? ? flag1: false,
? ? flag2: false,
? ? flag3: true
? },
? /**?
? ?* 滑動切換tab?
? ?*/
? bindChange: function(e) {
? ? console.log('debugbindcange')
? ? var that = this;
? ? that.setData({
? ? ? swipeIndex: e.detail.current
? ? });
?
? },
? swiperItemChange1: function(e) {
? ? var that = this;
? ? that.setData({
? ? ? itemIndex1: e.detail.current
? ? });
? },
? swiperItemChange2: function(e) {
? ? var that = this;
? ? that.setData({
? ? ? itemIndex2: e.detail.current
? ? });
? },
? swiperItemChange3: function(e) {
? ? var that = this;
? ? that.setData({
? ? ? itemIndex3: e.detail.current
? ? });
? },
? /**?
? ?* 點擊tab切換?
? ?*/
? swichNav: function(e) {
? ? var that = this;
? ? if (this.data.swipeIndex === e.currentTarget.dataset.current) {
? ? ? return false;
? ? } else {
? ? ? that.setData({
? ? ? ? currentTab: e.currentTarget.dataset.current
? ? ? })
? ? }
?
? },
? itemSwich1: function(e) {
? ? var that = this;
? ? if (this.data.itemIndex1 === e.currentTarget.dataset.current1) {
? ? ? return false;
? ? } else {
? ? ? that.setData({
? ? ? ? itemIndex1: e.currentTarget.dataset.current1,
? ? ? ? itemCurrent1: e.currentTarget.dataset.current1
? ? ? })
? ? }
? },
? itemSwich2: function(e) {
? ? var that = this;
? ? console.log(e)
? ? if (this.data.itemIndex2 === e.currentTarget.dataset.current2) {
? ? ? return false;
? ? } else {
? ? ? that.setData({
? ? ? ? itemIndex2: e.currentTarget.dataset.current2,
? ? ? ? itemCurrent2: e.currentTarget.dataset.current2
? ? ? })
? ? }
? },
? itemSwich3: function(e) {
? ? var that = this;
? ? if (this.data.itemIndex3 === e.currentTarget.dataset.current3) {
? ? ? return false;
? ? } else {
? ? ? that.setData({
? ? ? ? itemIndex3: e.currentTarget.dataset.current3,
? ? ? ? itemCurrent3: e.currentTarget.dataset.current3
? ? ? })
? ? }
? },
?
? /**
? ?* 滑動item綁定事件
? ?*/
? swiperTrans: function(e) {
? ? var that = this;
? ? var dx = e.detail.dx
? ??
? ? if (this.data.flag3 && (this.data.flag2) && (dx >= 50) && (dx < 100)) {
? ? ? console.log('debug')
? ? ? that.data.flag3 = false
? ? ? this.setData({
? ? ? ? currentTab: that.data.swipeIndex + 1,
? ? ? ??
? ? ? })
? ? }
? ? if (this.data.flag3 && (this.data.flag1) && (dx <= -50) && (dx > -100)) {
? ? ? that.data.flag3 = false
? ? ? this.setData({
? ? ? ? currentTab: that.data.swipeIndex - 1,
? ? ? ??
? ? ? })
? ? }
? ??
? },
?
? itemTouchLeftMove: function(e) {
? ? this.data.flag1 = true;
? },
? itemTouchLeftEnd: function(e) {
? ? this.data.flag1 = false;
? ? this.data.flag3 = true;
? },
? itemTouchRightMove: function(e) {
? ? this.data.flag2 = true;
? },
? itemTouchRightEnd: function(e) {
? ? this.data.flag2 = false;
? ? this.data.flag3 = true;
? }
})

json沒有

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用TypeScript實現(xiàn)楊輝三角的代碼示例

    使用TypeScript實現(xiàn)楊輝三角的代碼示例

    楊輝三角,又稱帕斯卡三角,是一個數(shù)學(xué)上非常有趣和重要的概念,它是一種數(shù)學(xué)結(jié)構(gòu),它不僅可以用于組合數(shù)學(xué),還可以應(yīng)用于代數(shù)、概率和許多其他領(lǐng)域,在本文中,我們將通過使用?TypeScript?來編寫楊輝三角的程序,同時深入探討?TypeScript?的類型系統(tǒng)
    2023-09-09
  • JavaScript 判斷瀏覽器類型及版本

    JavaScript 判斷瀏覽器類型及版本

    你知道世界上有多少種瀏覽器嗎?除了我們熟知的IE, Firefox, Opera, Safari四大瀏覽器之外,世界上還有近百種瀏覽器。
    2009-02-02
  • 詳細(xì)講解JavaScript中的this綁定

    詳細(xì)講解JavaScript中的this綁定

    在javascript的函數(shù)中,除了聲明時定義的形參之外,每個函數(shù)還可以接收兩個附加的參數(shù):this和arguments。這里就講一下this的作用以及不同場景下它的不同指向。
    2016-10-10
  • Omi v1.0.2發(fā)布正式支持傳遞javascript表達(dá)式

    Omi v1.0.2發(fā)布正式支持傳遞javascript表達(dá)式

    這篇文章主要介紹了Omi v1.0.2發(fā)布正式支持傳遞javascript表達(dá)式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • javascript計時器編寫過程與實現(xiàn)方法

    javascript計時器編寫過程與實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了javascript計時器編寫過程與實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 基于js實現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過程解析

    基于js實現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過程解析

    這篇文章主要介紹了基于js實現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Listloading.js移動端上拉下拉刷新組件

    Listloading.js移動端上拉下拉刷新組件

    這篇文章主要介紹了Listloading.js移動端上拉下拉刷新組件的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 微信小程序?qū)崿F(xiàn)頂部固定 底部分頁滾動效果

    微信小程序?qū)崿F(xiàn)頂部固定 底部分頁滾動效果

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)頂部固定底部分頁滾動效果,本文大概給大家分享三種解決方案,每種方案給大家詳細(xì)剖析通過代碼解析哪種方案更適合,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • BootStrap柵格之間留空隙的解決方法

    BootStrap柵格之間留空隙的解決方法

    BootStrap柵格系統(tǒng)可以把我們的container容器劃分為若干等分,如果想要每個部分之間留出一定的空隙,那么應(yīng)該怎么解決,本文就來介紹一下
    2021-08-08
  • js中判斷文本框是否為空的兩種方法

    js中判斷文本框是否為空的兩種方法

    js中判斷文本框是否為空的兩種方法,需要的朋友可以參考下。
    2011-07-07

最新評論