1. 程式人生 > >微信小程式頂部下拉選單欄

微信小程式頂部下拉選單欄

js程式碼

var cityData = require('../../utils/city.js');
Page({
  data: {
    //選擇的終點城市暫存資料
    endselect: "",
    //終點快取的五個城市
    endcitys: [],
    //使用者選擇省份之後對應的城市和縣城
    endkeys: {},
    //使用者選擇縣城
    town: [],
    //所有車長
    commanders: cityData.getcommanders(),
    //所有車型
    models: cityData.getmodels(),
    //選中的車長
commander: "", //選中的車型 model: "", displaycity: 0, city: "起點", city1: "目的地", //車型 model: "車長車型", qyopen: false, qyshow: true, nzopen: false, pxopen: false, nzshow: true, pxshow: true, isfull: false, cityleft: cityData.getCity(), citycenter: {}, cityright: {}, select1: ''
, select2: '', select3: '', shownavindex: '' }, onLoad: function (options) { var that = this var province = "" var city = "" var demo = new QQMapWX({ key: '你的騰訊地圖apikey' // 必填 }); //先進行一次最近的資料重新整理 // 可以通過 wx.getSetting 先查詢一下使用者是否授權了 "scope.userLocation" 這個 scope
wx.getSetting({ success(res) { if (!res['scope.userLocation']) { wx.authorize({ scope: 'scope.userLocation', success() { //獲取地理位置 wx.getLocation({ type: 'wgs84', success: function (res) { console.log(res) var latitude = res.latitude var longitude = res.longitude // 呼叫騰訊地圖的介面查詢當前位置 demo.reverseGeocoder({ location: { latitude: latitude, longitude: longitude }, success: function (res) { console.log(res) province = res.result.address_component.province city = res.result.address_component.city that.setData({ city: city }) //獲取資料更新頁面 }, fail: function (res) { console.log(res); }, complete: function (res) { // console.log(res); } }); } }) } }) } } }) }, //選擇起點 listqy: function (e) { if (this.data.qyopen) { this.setData({ qyopen: false, nzopen: false, pxopen: false, nzshow: true, pxshow: true, qyshow: false, isfull: false, shownavindex: 0 }) } else { this.setData({ qyopen: true, pxopen: false, nzopen: false, nzshow: true, pxshow: true, qyshow: false, isfull: true, shownavindex: e.currentTarget.dataset.nav }) } }, //目的地選擇終點 list: function (e) { if (this.data.nzopen) { this.setData({ nzopen: false, pxopen: false, qyopen: false, nzshow: false, pxshow: true, qyshow: true, isfull: false, shownavindex: 0 }) } else { this.setData({ content: this.data.nv, nzopen: true, pxopen: false, qyopen: false, nzshow: false, pxshow: true, qyshow: true, isfull: true, shownavindex: e.currentTarget.dataset.nav }) } }, //選擇車型 listpx: function (e) { if (this.data.pxopen) { this.setData({ nzopen: false, pxopen: false, qyopen: false, nzshow: true, pxshow: false, qyshow: true, isfull: false, shownavindex: 0 }) } else { this.setData({ nzopen: false, pxopen: true, qyopen: false, nzshow: true, pxshow: false, qyshow: true, isfull: true, shownavindex: e.currentTarget.dataset.nav }) } console.log(e.target) }, selectleft: function (e) { this.setData({ cityright: {}, citycenter: this.data.cityleft[e.currentTarget.dataset.city], city: e.target.dataset.city, select1: e.target.dataset.city, select2: '', select3: '' }); }, selectcenter: function (e) { this.setData({ cityright: this.data.citycenter[e.currentTarget.dataset.city], select2: e.target.dataset.city, select3: '', city: e.target.dataset.city }); //地區選擇完畢 }, selectcity: function (e) { console.log(e) this.setData({ city: this.data.cityright[e.target.dataset.city], select3: this.data.cityright[e.target.dataset.city] }); }, hidebg: function (e) { this.setData({ qyopen: false, nzopen: false, pxopen: false, nzshow: true, pxshow: true, qyshow: true, isfull: false, shownavindex: 0 }) }, //選擇了終點的某一項 selectsdbitem: function (e) { var cityleft = this.data.cityleft console.log(e.target.dataset.city) this.setData({ endkeys: cityleft[e.target.dataset.city], displaycity: 1, endselect: e.target.dataset.city }); }, //使用者選擇某個市級地區的時候觸發 selectsdbendkey: function (e) { var endkeys = this.data.endkeys console.log(e.target.dataset.city) this.setData({ town: endkeys[e.target.dataset.city], displaycity: 2, endselect: e.target.dataset.city }); }, //選擇五個地區 selectcityend: function (e) { console.log(e.target.dataset.city) var endcity = e.target.dataset.city var endcitys = this.data.endcitys if (endcitys.length == 0) { endcitys.push(endcity) } else { for (var i = 0; i < endcitys.length; i++) { if (endcitys[i] == endcity) { //刪除這個下標的元素 endcitys.splice(i, 1); //跳出迴圈 break } else if (i == endcitys.length - 1) { console.log(i) if (i >= 5) { wx.showToast({ title: '最多選五個終點', icon: 'warn', duration: 2000 }) } else { endcitys.push(endcity) } break } } } this.setData({ endcitys: endcitys }) }, //清空all已選擇的地區 emptyallendcity: function () { var endcitys = [] this.setData({ endcitys: endcitys }) }, //清除選中的項 emptyitem: function (e) { var endcitys = this.data.endcitys console.log(e.target.dataset.endcity) endcitys.splice(e.target.dataset.endcity, 1); this.setData({ endcitys: endcitys }) }, //返回上一級 returnupper: function () { var displaycity = this.data.displaycity console.log(displaycity) if (displaycity == 1) { displaycity = 0 } else if (displaycity == 2) { displaycity = 1 } else { displaycity = 0 } this.setData({ displaycity: displaycity, endselect: "" }) }, //確定終點 determineend: function () { }, //確定車型車長 determinecar: function () { }, //選中車長的某個項 selectcmditem: function (e) { var commander = e.target.dataset.commander this.setData({ commander: commander }) }, //選中車型的某個項 selectmdlitem: function (e) { var model = e.target.dataset.model this.setData({ model: model }) } })

wxml

<view class="page">
  <view class="nav">
    <view class="nav-son {{shownavindex == 1? 'active' : ''}}" bindtap="listqy" data-nav="1">
      <view class="content">{{city}}</view>
      <view class="icon"></view>
    </view>
    <view class="nav-son borders {{shownavindex == 2? 'active' : ''}}" bindtap="list" data-nav="2">
      <view class="content">{{city1}}</view>
      <view class="icon"></view>
    </view>
    <view class="nav-son {{shownavindex == 3? 'active' : ''}}" bindtap="listpx" data-nav="3">
      <view class="content">{{model}}</view>
      <view class="icon"></view>
    </view>
  </view>
  <view class="quyu {{qyopen ? 'slidown' : 'slidup'}}{{qyshow ? 'disappear':''}}">
    <view class="qy quyu-left">
      <view class="{{select1 == index ? 'current' : ''}}" wx:for="{{cityleft}}" bindtap="selectleft" data-city='{{index}}' wx:key="unique">
        {{index}}
      </view>
    </view>
    <view class="qy quyu-center">
      <view class="{{select2 == index ? 'current2' : ''}}" wx:for="{{citycenter}}" bindtap="selectcenter" data-city='{{index}}' wx:key="unique">
        {{index}}
      </view>
    </view>
    <view class="qy quyu-right">
      <view wx:for="{{cityright}}" wx:key="unique" bindtap='selectcity' data-city='{{index}}'>
        {{item}}
      </view>
    </view>

  </view>

  <view class="temp temp1 {{nzopen ? 'slidown' : 'slidup'}}{{nzshow ? 'disappear':''}}">
    <view class='tempheight'>
      <view class='slidowntop'>
        <view>
          <text>已選地區 </text>
        </view>
        <view class='emptyall'>
          <view class='emptyallright' bindtap='emptyallendcity'>
            <text>清空</text>
          </view>
        </view>
      </view>
      <view class='emptyendcitys'>
        <block wx:for="{{endcitys}}" wx:key="index">
          <view class='emptyendcitysitem' bindtap='emptyitem' data-endcity='{{index}}'>{{item}}</view>
        </block>
      </view>
      <view class='slidowncenter'>
        <view class='endselect'>
          <text>選擇:{{endselect}}</text>
        </view>
        <block wx:if="{{displaycity!=0}}">
          <view class="return">
            <view bindtap='returnupper'>
              <text>返回上一級</text>
            </view>
          </view>
        </block>
      </view>

      <block wx:if="{{displaycity==0?true:false}}">
        <view class="slidownbottom">
          <block wx:for="{{cityleft}}" wx:key="unique">
            <view class='sdbitem' data-city='{{index}}' bindtap='selectsdbitem'> {{index}}</view>
          </block>
        </view>
      </block>
      <block wx:if="{{displaycity==1?true:false}}">
        <view class="slidownbottom">
          <block wx:for="{{endkeys}}" wx:key="unique">
            <view class='sdbitem' data-city='{{index}}' bindtap='selectsdbendkey'> {{index}}</view>
          </block>
        </view>
      </block>
      <block wx:if="{{displaycity==2?true:false}}">
        <view class="slidownbottom">
          <block wx:for="{{town}}" wx:key="unique">
            <view class="sdbitem" data-city='{{item}}' bindtap='selectcityend'> {{item}}</view>
          </block>
        </view>
      </block>
    </view>
    <view class='queding' bindtap='determineend'>
      <text class='qdtext'>確定</text>
    </view>
  </view>



  <view class="temp temp2 {{pxopen ? 'slidown' : 'slidup'}}{{pxshow ? 'disappear':''}}">
    <view class='tempheight'>
      <view class='slidowntop'>
        <view>
          <text>車長</text>
        </view>
      </view>
      <view class="commanders">
        <block wx:for="{{commanders}}" wx:key="unique">
          <view class="sdbitem {{commander==item ? ' active ' : ' '}}" data-commander='{{item}}' bindtap='selectcmditem'> {{item}}</view>
        </block>
      </view>
      <view class='slidowncenter'>
        <view class='endselect'>
          <text>車型</text>
        </view>
      </view>
      <view class="slidownbottom">
        <block wx:for="{{models}}" wx:key="unique">
          <view class="sdbitem {{model==item ? ' active ' : ' '}}" data-model='{{item}}' bindtap='selectmdlitem'> {{item}}</view>
        </block>
      </view>
    </view>
    <view class='queding' bindtap='determinecar'>
      <text class='qdtext'>確定</text>
    </view>
  </view>

  <view class="fullbg {{isfull ?'fullopacity':''}}" bindtap="hidebg"></view>
</view>

wxss


.page {
  font-family: 'PingFang SC',
                 'Helvetica Neue',
                 Helvetica,
                 'Droid Sans Fallback',
                 'Microsoft Yahei',
                 sans-serif;
  width: 100%;
  position:fixed;
  background: #fff;
  overflow: hidden;
}

.nav {
  position: relative;
  z-index: 99;
  display: flex;
  border-top: 1px solid #d1d3d4;
  border-bottom: 1px solid #d1d3d4;
  background: #fff;
}

.nav-son {
  display: flex;
  flex: 1;
  text-align: center;
  height: 40px;
  align-items: center;
  justify-content: center;
  font-size: 14px;
}

.borders {
  border-left: 1px solid #e6e6e6;
  border-right: 1px solid #e6e6e6;
}

.content {
  display: inline-block;
}

.icon {
  display: inline-block;
  border: 4px solid transparent;
  border-top: 4px solid #9b9b9b;
  margin-left: 5px;
}

.temp {
  position: relative;
  z-index: 4;
  font-size: 14px;
}

.temp1 {
  display: flex;
  width: 100%;
  height: 1150rpx;
  overflow-y: scroll;
  background: #fff;
  color: #666;
}



.slidedown {
  transform: translateY(0%);
}

.quyu {
  position: relative;
  display: none;
  height: 750rpx;
  z-index: 5;
}

.quyu .qy {
  overflow-y: scroll;
  float: left;
  width: 33.33%;
  height: 750rpx;
  line-height: 80rpx;
  box-sizing: border-box;
  font-size: 14px;
  color: #717273;
}

.qy view {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
  padding-left: 15rpx;
}

.quyu-left {
  background: #c5c5c5;
}

.quyu-center {
  background: #e0e0e0;
}

.quyu-right {
  background: #fff;
}

.quyu-right view {
  border-bottom: 1px solid #c5c5c5;
}

.current {
  background: #e0e0e0;
}

.current2 {
  background: #fff;
}

.fullbg {
  position: fixed;
  top: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  background: rgb(1, 1, 1);
  transition: all 2s;
  opacity: 0;
}

.fullopacity {
  opacity: 0.2;
}

.nav-son.active .content {
  color: #fa871e;
}

.nav-son.active .icon {
  border-bottom: 4px solid #fa871e;
  border-top: 0;
}

@keyframes slidown {
  from {
    transform: translateY(-100%);
  }

  to {
    transform: translateY(0%);
  }
}

.slidown {
  display: block;
  animation: slidown 0.2s ease-in both;
}

@keyframes slidup {
  from {
    transform: translateY(0%);
  }

  to {
    transform: translateY(-100%);
  }
}

.tempheight {
  height: 1020rpx;
  overflow-y: scroll;
}

.slidup {
  display: block;
  animation: slidup 0.2s ease-in both;
}

.disappear {
  display: none;
}

.slidowntop {
  display: flex;
  flex-direction: row;
  padding: 20rpx 24rpx 10rpx 24rpx;
}

.emptyall {
  margin-left: 475rpx;
  color: #fa871e;
}

.emptyallright {
  width: 80rpx;
  text-align: center;
}

.endselect {
  width: 350rpx;
  text-align: left;
}

.return {
  margin-left: 200rpx;
  color: #fa871e;
}

.slidowncenter {
  margin-top: 20rpx;
  padding-top: 20rpx;
  padding-left: 24rpx;
  display: flex;
  flex-direction: row;
  align-content: space-between;
  border-top: solid #d1d3d4 1rpx;
}

.slidownbottom {
  margin-top: 10rpx;
  padding: 10rpx;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.sdbitem {
  width: 119rpx;
  text-align: center;
  border: solid 
            
           

相關推薦

程式頂部選單

js程式碼 var cityData = require('../../utils/city.js'); Page({ data: { //選擇的終點城市暫存資料 endselect: "", //終點快取的五個城市 e

程式實現選單

點選對應上面的tab選中 <view class='nav-wrapper'> <view class='nav-container'> <view class="scroll_box"> <scroll-view cla

程式禁止_解決程式出現空白的情況

微信小程式禁止下拉 在微信小程式中,用力往下拉動,頁面頂部會出現一段空白的地方。 產品的需求不太允許這麼做,會影響使用者體驗,檢視文件發現可以使用enablePullDownRefresh這屬性來實現,在page.json裡面新增: 1 "enablePullDownRefresh":false

程式select框實現

微信小程式select下拉框實現 小程式中是沒有h5中的下拉 標籤的 所以要實現下拉功能就必須自己動手寫拉  這裡為了更清楚的顯示層級 就把原始碼直接複製過來了 <view class='list-msg'>     <vi

程式 PullDownRefresh重新整理或者onShow切換頁面請求或者頻繁請求swiper裡面元素不顯示

問題描述:微信小程式中,有個業務場景是下拉重新整理重新請求輪播圖和下面的商品,我用小程式自帶的swiper元件和PullDownRefresh下拉重新整理,我在後臺上架一個商品然後下拉重新整理,1次是可以的,2次是可以的。頻繁上架下架然後輪播圖區域就顯示不出來了。 故障圖:

程式載入多次請求的解決方案,避免使用者多次發起請求降低業務處理。

方案一:小程式前端:做好請求判斷,請求前:設定常量變為0 ,觸發網路請求介面 常量變為 1,回撥成功常量設定 0 ,每次請求前判斷常量是否為 1,為1 即意味著上次請求回撥沒有接收到。防止多次請求。但是

程式如何設定底部選單(tab

tabBar 如果小程式是一個多 tab 應用(客戶端視窗的底部或頂部有 tab 欄可以切換頁面),可以通過 tabBar 配置項指定 tab 欄的表現,以及 tab 切換時顯示的對應頁面。 屬性 說明 color

程式】上重新整理和載入

上拉重新整理和下拉載入有兩種方式可以實現: 1.使用scroll-view元件進行操作,使用自帶的scrolltoupper和scrolltolower事件可以實現。適合頁面區域性的上拉下拉。 附上

程序】刷新真機測試無效

boolean ble bottom lld 開發者 開發 blank ges art 根據文檔的描述,做上拉加載時直接實現頁面的onReachBottom()函數即可。但是要做下拉刷新時,除了實現onPullDownRefresh()函數外,還必須要在app.json中

程式選單

1. wxml部分 <!-- 篩選 --> <view class="page"> <!-- 一級 --> <view class="nav"> <!-- 年齡 --> &l

程式 頂部標題的相關問題

wx.showNavigationBarLoading(Object object) 在當前頁面顯示導航條載入動畫   wx.hideNavigationBarLoading(Object object) 在當前頁面隱藏導航條載入動畫   wx.setNa

程序-解決刷新報錯

info stop 設置 數據 字符串 opp 開啟 技術 true 關於“enablePullDownRefresh”: “true” 一、使用方式 在 Page 中定義 onPullDownRefresh 處理函數,監聽該頁面用戶下拉刷新事件。需要在 config 的w

技術白之記錄程式頂部導航

現在來說說頂部導航欄的程式碼,先來看看簡單的頂部導航欄的截圖: 可以從上面的圖片看到有寫著[簡介]和[試看]的導航欄內容,下面來記錄下程式碼過程: wxml <!--導航條--> <view class="navbar"> <text wx:for

程式中手風琴摺疊選單

效果圖 1.wxml // WXML片段 <block wx:for="{{list}}" wx:for-item="list" wx:for-index="idx"> <!-- 訂單組list --> <

程式基礎-側邊選單的實現

效果 思路: 1、整個頁面分成左右兩個view,橫向佈局;左側view用子選單view一個個填充,縱向佈局。 2、子選單內容存入陣列,點選子選單view,用data-index="{{index}}"回傳陣列索引index,把index賦給程式資料select

程序 - ()加載更多數據

class success request etl isa icon ica 16px gets 註意和後端配合就行了,前端也只能把數據拼接起來! 無論是下拉加載還是加載更多,一樣的道理! 註意首次加載傳遞參數 註意每次加載數據

程式頂部用 scroll-view 元件橫向滾動,類似tab選項卡的效果,

<viewwx:for="{{navDate}}"class="{{curMeal===index ? 'selected-meal':'meal-time-item'}}"data-index="{{index}}"bindtap="selectMeal"data-id="{{item._id}}"&

程式開發之下重新整理 上載入

微信小程式中的下拉重新整理,上拉載入的功能很常見,目前我知道的有兩種可行的方法,一是scroll-view,二是整個頁面重新整理.今天說說第一種,自己造輪子,難免有些瑕疵,日後慢慢完善. 上gif: 原理: scroll-view中有監聽滑動的方法,這個跟androi

程式之二三級選單(navigateTo傳遞資料的應用)

今早來之後稍微寫了下今天的工作目標然後就是自己犯蠢到現在的過程,所幸最後還是走回了正軌,記錄一下我在過程中的內心彈幕,並把最後結果記錄一下 微信小程式-估價系統-車輛品牌款式等-三級選單 車標 省份-

程式頂部滑動tab

小程式商品展示需要導航欄的商品分類進行滑動 效果圖: 首先是滑動的效果: <scroll-view scroll-x="true" style="width: 100%;white-space:nowrap;"> </scrol