微信小程序城市選擇及搜索功能的方法
實(shí)現(xiàn)搜索城市功能
參考 微信小程序 之『仿美團(tuán)城市選擇 城市切換』
https://github.com/cinoliu/-selectCity
js文件
// pages/address/address.js var app = getApp() Page({ data: { searchLetter: [], showLetter: "", winHeight: 0, cityList: [], isShowLetter: false, scrollTop: 0,//置頂高度 scrollTopId: '',//置頂id city: "", cityList_search:[], address_show:false, search_city:[], is_data:true, empty:'', }, onLoad: function (options) { console.log(options.currentcity) // 生命周期函數(shù)--監(jiān)聽頁面加載 let that = this; that.setData({ city: options.currentcity }) var searchLetter = ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z"]; new Promise(function (resolve) { that.getCity(function (data) { console.log(data) let cityObj = data.cityList; var tempObj = []; for (var i = 0; i < searchLetter.length; i++) { var initial = searchLetter[i]; var cityInfo = []; var tempArr = {}; tempArr.initial = initial; for (var j = 0; j < cityObj.length; j++) { if (initial == cityObj[j].initial) { cityInfo.push(cityObj[j]); } } tempArr.cityInfo = cityInfo; tempObj.push(tempArr); } console.log(tempObj) that.setData({ cityList: tempObj }) resolve(tempObj); }) }).then(function(res){ console.log(res) let cityObj = []; var sysInfo = wx.getSystemInfoSync(); var winHeight = sysInfo.windowHeight; var itemH = winHeight / searchLetter.length; var tempObj = []; for (var i = 0; i < searchLetter.length; i++) { var temp = {}; temp.name = searchLetter[i]; temp.tHeight = i * itemH; temp.bHeight = (i + 1) * itemH; tempObj.push(temp) } that.setData({ winHeight: winHeight, itemH: itemH, searchLetter: tempObj, }) }) }, getCity: function (callBack){ let that = this; app.commonRequest('wxapp/public/getCityList', 'POST', {}, function (data) { console.log(data); if (data.status == '200') { that.setData({ cityList: data.datainfo.list, // city: data.datainfo.getcode, }) callBack({ cityList: data.datainfo.list }) } else { callBack({ cityList: data.datainfo.list }) } }) }, set_current_city:function(set_city,callBack){ let that = this; app.commonRequest('wxapp/public/getCityList', 'POST', { area_name: set_city, cityCheckType:1, }, function (data) { console.log(data) if (data.status == "200") { callBack({ data: data }) }else { callBack({ data: data }) } }) }, search_city:function(e){ let that =this; that.setData({ address_show:true }) }, cancel_city:function(e){ let that = this; that.setData({ search_city:[], address_show: false, empty:'', }) }, seacrch_city:function(e){ let that =this; let search_val = e.detail.value; console.log(search_val); app.commonRequest('wxapp/public/getCityList', 'POST', { area_name: search_val }, function (data) { console.log(data) if(data.status == "200"){ if (data.datainfo.list.length >0){ that.setData({ search_city: data.datainfo.list, is_data: true }) } else{ that.setData({ search_city: data.datainfo.list, is_data:false }) } } }) }, clickLetter: function (e) { console.log(e.currentTarget.dataset.letter) var showLetter = e.currentTarget.dataset.letter; this.setData({ showLetter: showLetter, isShowLetter: true, scrollTopId: showLetter, }) var that = this; setTimeout(function () { that.setData({ isShowLetter: false }) }, 1000) }, //選擇城市 bindCity: function (e) { let that = this; console.log("bindCity"); that.set_current_city(e.currentTarget.dataset.city,function(data){ console.log(data) }); wx.setStorageSync('currentcity', e.currentTarget.dataset.city) // that.onLoad(); this.setData({ city: e.currentTarget.dataset.city, // scrollTop: 0, }) // 回到首頁 wx.switchTab({ url: '/pages/index/index' }) }, })
wxml文件
<!--pages/address/address.wxml--> <view class="searchLetter touchClass"> <view class="thishotText" bindtap="hotCity"> <view style="margin-top:0;">當(dāng)前</view> <!-- <view style="margin-top:0;">熱門</view> --> </view> <view wx:for="{{searchLetter}}" style="color:#53985F;font-size:20rpx;" wx:key="index" data-letter="{{item.name}}" catchtouchend="clickLetter" >{{item.name}}</view> </view> <block wx:if="{{isShowLetter}}"> <view class="showSlectedLetter"> {{showLetter}} </view> </block> <scroll-view scroll-y="true" style="height:{{winHeight}}px" scroll-into-view="{{scrollTopId}}" scroll-top="{{scrollTop}}"> <view class='searchbox'> <view class='input_box'> <image class='search' src='/images/search.png'></image> <input placeholder='城市' onchange="seacrch_city" oninput="seacrch_city" onblur="seacrch_city" value='{{empty}}' bindtap='search_city'></input> <view class='close' bindtap='cancel_city'>×</view> </view> <view class='cancel' bindtap='cancel_city'>取消</view> </view> <view id='address' hidden='{{address_show}}'> <view class='current_city li_style'>當(dāng)前:{{city}}</view> <view class='all_city'> <view class='li_style'>所有城市</view> </view> <view class="selection" wx:for="{{cityList}}" wx:key="{{item.initial}}"> <view class="item_letter" id="{{item.initial}}">{{item.initial}}</view> <view class="item_city" wx:for="{{item.cityInfo}}" wx:for-item="ct" wx:key="{{ct.id}}" data-cityCode="{{ct.area_code}}" data-city="{{ct.area_name}}" bindtap="bindCity"> {{ct.area_name}} </view> </view> </view> <view id='address_search' hidden='{{!address_show}}'> <view> <view class="item_city" wx:for="{{search_city}}" wx:for-item="ct" wx:key="{{ct.id}}" data-cityCode="{{ct.area_code}}" data-city="{{ct.area_name}}" bindtap="bindCity"> {{ct.area_name}} </view> <view class='noData' hidden='{{is_data}}'>暫無數(shù)據(jù)</view> </view> </view> </scroll-view>
wxss文件
/* pages/address/address.wxss */ .searchbox{ overflow: hidden; margin: 0 20rpx; } .search{ width: 20px; height: 20px; float: left; margin:7rpx 10rpx; } .input_box{ width: 630rpx; height: 50rpx; background: #efefef; border-radius: 30rpx; float: left; } .input_box input{ font-size: 25rpx; width: 450rpx; float: left; } .input_box .close{ width:30rpx; height:30rpx; background:#aaa; color:#fff; border-radius:50%; float:right; margin-right:20rpx; margin-top:10rpx; line-height:27rpx; font-size:30rpx; text-align:center; } .searchbox .cancel{ font-size: 25rpx; color: #53985F; width: 80rpx; text-align: right; float: right; line-height: 50rpx; } .current_city{ border-bottom: 1rpx solid #eee; } .li_style{ height: 50rpx; padding: 20rpx 0; width: 710rpx; line-height: 50rpx; font-size: 29rpx; margin:0 20rpx; } .searchLetter { position: fixed; right: 0; width: 50rpx; text-align: center; justify-content: center; display: flex; flex-direction: column; color: #666; z-index: 1; } .searchLetter view { margin-top: 20rpx; } .touchClass { background-color: #fff; color: #fff; top: 100rpx; } .showSlectedLetter { background-color: rgba(0, 0, 0, 0.5); color: #fff; display: flex; justify-content: center; align-items: center; position: fixed; top: 50%; left: 50%; margin: -100rpx; width: 200rpx; height: 200rpx; border-radius: 20rpx; font-size: 52rpx; z-index: 1; } .selection { display: flex; width: 100%; flex-direction: column; margin-top: 10rpx; } .item_letter { display: flex; background-color: #f5f5f5; height: 50rpx; padding-left: 34rpx; align-items: center; font-size: 24rpx; color: #666; } .item_city { display: flex; background-color: #fff; height: 100rpx; padding-left: 34rpx; align-items: center; border-bottom: 1rpx solid #ededed; font-size: 24rpx; color: #666; } .hotcity-common { font-size: 24rpx; color: #666; padding: 0 0 0 30rpx; } .thisCity { padding-top: 30rpx; } .thisCityName { display: inline-block; border: 1rpx solid #2ab4ff; border-radius: 8rpx; padding: 10rpx 0; font-size: 24rpx; color: #2ab4ff; text-align: center; min-width: 149.5rpx; margin: 20rpx 0 20rpx 30rpx; } .thishotText { color: #53985F; font-size: 20rpx; margin: 0 !important; } .slectCity { border-color: #2ab4ff !important; } .slectCity view { color: #2ab4ff !important; } .weui-grid { position: relative; float: left; padding: 10rpx 0; width: 149.5rpx; box-sizing: border-box; border: 1rpx solid #ececec; border-radius: 8rpx; margin: 10rpx 12rpx; } .weui-grid__label { display: block; text-align: center; color: #333; font-size: 24rpx; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .noData{ text-align: center; font-size: 30rpx; color: #aaa; line-height: 60rpx; }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序搜索組件wxSearch實(shí)例詳解
- 微信小程序?qū)崿F(xiàn)全局搜索代碼高亮的示例
- 微信小程序下拉框搜索功能的實(shí)現(xiàn)方法
- 小程序?qū)崿F(xiàn)搜索框功能
- 微信小程序?qū)崿F(xiàn)搜索歷史功能
- 小程序?qū)崿F(xiàn)搜索框
- 微信小程序 搜索框組件代碼實(shí)例
- 小程序獲取當(dāng)前位置加搜索附近熱門小區(qū)及商區(qū)的方法
- 微信小程序搜索功能(附:小程序前端+PHP后端)
- 微信小程序 可搜索的地址選擇實(shí)現(xiàn)詳解
- 微信小程序?qū)崿F(xiàn)搜索指定景點(diǎn)周邊美食、酒店
- 微信小程序開發(fā)搜索功能實(shí)現(xiàn)(前端+后端+數(shù)據(jù)庫)
相關(guān)文章
BootStrap數(shù)據(jù)表格實(shí)例代碼
本文通過實(shí)例代碼給大家分享了BootStrap數(shù)據(jù)表格的相關(guān)知識(shí),感興趣的朋友一起看看吧2017-09-09JS讀取XML文件數(shù)據(jù)并以table形式顯示數(shù)據(jù)的方法(兼容IE與火狐)
這篇文章主要介紹了JS讀取XML文件數(shù)據(jù)并以table形式顯示數(shù)據(jù)的方法,涉及javascript針對(duì)xml節(jié)點(diǎn)操作及HTML表格操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06微信小程序?qū)崿F(xiàn)一張或多張圖片上傳(云開發(fā))
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)一張或多張圖片上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Javascript獲取統(tǒng)一管理的提示語(message)
這篇文章主要介紹了Javascript獲取統(tǒng)一管理的提示語(message)的相關(guān)資料,需要的朋友可以參考下2016-02-02關(guān)于JavaScript中JSON的5個(gè)小技巧分享
這篇文章主要和大家分享五個(gè)JavaScript中的JSON技巧,例如:隱藏字符串化數(shù)據(jù)中的某些屬性、創(chuàng)建自定義輸出格式等,感興趣的小伙伴可以了解一下2022-03-03解析JavaScript中的不可見數(shù)據(jù)類型
這篇文章主要是對(duì)JavaScript中的不可見數(shù)據(jù)類型進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12JS鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)方法
程序開發(fā)人員可以使用一些簡單的技術(shù)來改進(jìn)自己的代碼編寫工作。你可以寫一些函數(shù)來處理各種常見任務(wù),以節(jié)省時(shí)間;也可以改進(jìn)一下代碼的實(shí)現(xiàn)方式,比如你可以把方法的鏈?zhǔn)秸{(diào)用技術(shù)用到自己所寫的JS庫中,把自己喜歡的方法串起來調(diào)用。2013-03-03用于CSS代碼壓縮與格式化的javascript函數(shù)代碼
呵呵,發(fā)現(xiàn)只要幾行JS代碼就可實(shí)現(xiàn)css的壓縮與格式化,非常不錯(cuò)。2009-12-12