微信小程序?qū)崿F(xiàn)彈出菜單功能
需求
點(diǎn)擊標(biāo)簽欄按鈕,向下彈出菜單,再次點(diǎn)擊,收回菜單

要解決的問題
- 標(biāo)簽欄三欄樣式,標(biāo)簽欄固定不動(dòng);
- 點(diǎn)擊標(biāo)簽欄彈出菜單,并且出現(xiàn)透明遮罩;
- 遮罩優(yōu)先級(jí)在彈出框之下;
- 彈出框內(nèi)標(biāo)簽的設(shè)置;
- 滾動(dòng)欄滾動(dòng)條的隱藏
如何解決?
- 彈性布局,橫向,三者平分整欄;
- 狀態(tài)監(jiān)聽點(diǎn)擊事件,數(shù)據(jù)控制hide或者show,通過rgba設(shè)置透明度
- 彈出框設(shè)置z-index;
- 彈性布局flex 橫向排列 超出后wrap 然后space-around控制間距
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
具體實(shí)現(xiàn)
wxml
<import src="../../templates/template" />
<view class="container {{isMask?'mask':''}}">
<view class="header">
<view class="filterCity {{status=='1' && isActive?'active':''}}" data-status='1' bindtap="changeStatus">
<view class="city">城市篩選</view>
<image src="{{status=='1' && isActive?'../../youzan-image/red-up.png':'../../youzan-image/down.png'}}" />
</view>
<view class="filterJob {{status=='2' && isActive?'active':''}}" data-status='2' bindtap="changeStatus">
<view class="job">職位篩選</view>
<image src="{{status=='2' && isActive?'../../youzan-image/red-up.png':'../../youzan-image/down.png'}}" />
</view>
<view class="filterOrder {{status=='3'&& isActive?'active':''}}" data-status='3' bindtap="changeStatus">
<view class="order">排序方式</view>
<image src="{{status=='3' && isActive?'../../youzan-image/red-up.png':'../../youzan-image/down.png'}}" />
</view>
</view>
<block wx:if="{{isActive==true&&status=='1'}}">
<view class="cityContainer">
<block wx:for="{{city}}" wx:key="id" wx:for-index="index">
<view class="city {{isSelect&&index==curIndex?'select':''}}" data-index="{{index}}" bindtap="select">{{item}}</view>
</block>
</view>
</block>
<block wx:if="{{isActive==true&&status=='2'}}">
<scroll-view scroll-y="true" class="posContainer">
<block wx:for="{{cur}}" data-index='index' wx:for-index='index' wx:key="index">
<view class="title">{{item.title}}</view>
<view class="poscontent">
<view wx:for="{{item.types}}" wx:for-item="type" wx:key='id' wx:for-index="{{index}}" data-index="{{index}}">
<view class="tag {{isSelect&&index==curIndex?'select':''}}" data-id="{{id}}" bindtap="multiSelect">{{type}}</view>
</view>
</view>
</block>
<view class="confirm">
<button class="weui-btn" type="warn">確認(rèn)</button>
</view>
</scroll-view>
</block>
<block wx:if="{{isActive==true&&status=='3'}}">
<view class="orderContainer">
<view class="block">智能排序</view>
<view class="block">時(shí)間排序</view>
<view class="block">薪資排序</view>
</view>
</block>
<view class="listContainer" >
<view wx:for="{{jobList}}" wx:key="index" data-index="{{index}}">
<template is="list-item" data="{{...item}}" />
</view>
</view>
<view class="search " bindtap="search">
<image src="../../youzan-image/search.png" />
<text>搜索</text>
</view>
</view>
wxss
page {
position: relative;
width: 100%;
height: 100vh;
}
.header {
width: 100%;
height: 80rpx;
position: fixed;
top: 0;
display: flex;
flex-direction: row;
justify-content: space-between;
text-align: center;
color: #313131;
font-size: 16px;
border-bottom: 1rpx solid #eeeeee;
z-index: 9999;
background-color: #fff;
}
.filterCity {
flex: 1;
position: relative;
height: 80rpx;
line-height: 80rpx;
}
.filterJob {
position: relative;
flex: 1;
height: 80rpx;
line-height: 80rpx;
}
.filterOrder {
position: relative;
flex: 1;
height: 80rpx;
line-height: 80rpx;
}
.header image {
position: absolute;
right: 15rpx;
top: 26rpx;
width: 30rpx;
height: 30rpx;
}
.active {
color: #ef0001;
}
.mask {
width: 100%;
height: 100%;
position: fixed;
top: 80rpx;
background-color: rgba(15, 15, 26, 0.3);
}
.cityContainer {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: space-between;
flex-wrap: wrap;
width: 100%;
height: 300rpx;
z-index: 999;
background-color: #fff;
border-bottom: 1rpx solid #e9e9e9;
padding-bottom: 130rpx;
}
.cityContainer .city {
display: block;
font-size: 15px;
margin-top: 100rpx;
width: 150rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
border: 1rpx solid #e9e9e9;
overflow: hidden;
}
.select {
color: #ffffff;
background-color: #ed0000;
}
.posContainer {
height: 980rpx;
width: 100%;
background-color: #fff;
/* overflow:auto; */
}
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
.title {
margin-top: 55rpx;
font-size: 15px;
margin-left: 28rpx;
}
.poscontent {
width: 100%;
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
margin-top: -15rpx;
}
.tag {
margin-left: 28rpx;
margin-top: 23rpx;
font-size: 13px;
width: 150rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
border: 1rpx solid #e9e9e9;
}
.confirm {
width: 100%;
height: 150rpx;
border: 1rpx solid transparent;
background-color: #fff;
}
.weui-btn {
position: fixed;
width: 95%;
bottom: 52rpx;
left: 50%;
transform: translateX(-50%);
}
.orderContainer {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
background-color: #fff;
width: 100%;
height: 125rpx;
}
.block {
font-size: 13px;
width: 200rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
border: 1rpx solid #e9e9e9;
}
.search {
position: fixed;
bottom: 80rpx;
background-color: #fff;
right: 25rpx;
width: 150rpx;
height: 75rpx;
line-height: 75rpx;
text-align: center;
border-radius: 35rpx;
box-shadow: 1rpx 1rpx 7rpx 7rpx #f5f5f5;
}
.search image {
width: 30rpx;
height: 30rpx;
}
.search text {
font-size: 15px;
padding-left: 9rpx;
color: #666666;
}
.listContainer {
width: 100%;
height: 100%;
margin-top: 80rpx;
}
js
import category from '../../api/employ'
import jobList from '../../api/detail'
Page({
data: {
curIndex: '',
isActive: false,
jobList:[],
cur: [],
job: [],
isShow: true,
status: 0,
isMask: false,
isSelect: false,
city: ['全國', '杭州', '北京', '深圳', '上海', '廣州', '武漢', '重慶']
},
changeStatus(e) {
let status = e.currentTarget.dataset.status;
let cur = category;
this.setData({
isActive: !this.data.isActive,
status: status,
isMask: !this.data.isMask,
cur: cur,
})
},
select(e) {
let curIndex = e.currentTarget.dataset.index;
this.setData({
isSelect: " curIndex == this.data.curIndex ? '!this.data.isActive' : 'true' ",
isActive: false,
isMask:false,
curIndex: curIndex,
})
},
multiSelect(e){
let multiIndex=e.currentTarget.dataset.index;
this.setData({
isSelect:!this.data.isSelect,
curIndex:multiIndex
})
},
search(e) {
wx.navigateTo({
url: '../search/search',
})
},
onLoad: function (e) {
this.setData({
jobList:jobList
})
},
click:function (e) {
let id =e.currentTarget.dataset.id;
wx.navigateTo({
url: `../detail/detail?id=${id}`,
})
}
})
總結(jié)
以上所述是小編給大家介紹的微信小程序?qū)崿F(xiàn)彈出菜單功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript的removeChild()函數(shù)用法詳解
removechild 函數(shù)可以刪除父元素的指定子元素,通過本文給大家介紹javascript的removeChild()函數(shù)用法,對(duì)js removechild函數(shù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12
JS實(shí)現(xiàn)換膚功能的方法實(shí)例詳解
這篇文章主要介紹了JS實(shí)現(xiàn)換膚功能的方法,結(jié)合實(shí)例形式分析了javascript針對(duì)頁面元素屬性與樣式動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01
JavaScript實(shí)現(xiàn)開關(guān)等效果
本文給大家分享一段簡單的代碼基于js實(shí)現(xiàn)開關(guān)燈效果,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09
javascript firefox兼容ie的dom方法腳本
js firefox下兼容ie的dom的實(shí)現(xiàn)方法小結(jié)。利用我們?yōu)榱思嫒荻酁g覽器寫出更好的效果代碼2008-05-05
self.attachevent is not a function的解決方法
今天一個(gè)客戶用chrome瀏覽器訪問網(wǎng)站,他的網(wǎng)站js提示self.attachevent is not a function,這個(gè)問題就是這個(gè)瀏覽器不支持attachevent,可以通過如下方法解決了,分享一下,需要的朋友可以參考下2017-04-04
javascript字體顏色控件的開發(fā) JS實(shí)現(xiàn)字體控制
小編給大家?guī)硪粋€(gè)用javascript編寫的能控制字體大小個(gè)顏色等基本信息的控件寫法,喜歡的嘗試編寫一下。2017-11-11
微信小程序?qū)崿F(xiàn)選擇地址省市區(qū)三級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)選擇地址省市區(qū)三級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
JS實(shí)現(xiàn)樹形結(jié)構(gòu)與數(shù)組結(jié)構(gòu)相互轉(zhuǎn)換并在樹形結(jié)構(gòu)中查找對(duì)象
這篇文章介紹了JS實(shí)現(xiàn)樹形結(jié)構(gòu)與數(shù)組結(jié)構(gòu)相互轉(zhuǎn)換并在樹形結(jié)構(gòu)中查找對(duì)象的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

