微信小程序实用组件:城市切换
来源:互联网 发布:apache cgi详解 编辑:程序博客网 时间:2024/06/05 02:38
在很多微信小程序中因为分区域服务可能都需要城市切换,如果又一个现成的轮子那大家就不用自己造了。
js文件:
var city = require('../../utils/city.js'); Page({ data: { searchLetter: [], showLetter: "", winHeight: 0, tHeight:0, bHeight:0, startPageY:0, cityList:[], isShowLetter:false, scrollTop:0, city:"" }, onLoad: function (options) { // 生命周期函数--监听页面加载 var searchLetter = city.searchLetter; var cityList=city.cityList(); // console.log(cityInfo); var sysInfo = wx.getSystemInfoSync(); console.log(sysInfo); var winHeight = sysInfo.windowHeight; //添加要匹配的字母范围值 //1、更加屏幕高度设置子元素的高度 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) } this.setData({ winHeight: winHeight, itemH: itemH, searchLetter: tempObj, cityList:cityList }) console.log(this.data.cityInfo); }, onReady: function () { // 生命周期函数--监听页面初次渲染完成 }, onShow: function () { // 生命周期函数--监听页面显示 }, onHide: function () { // 生命周期函数--监听页面隐藏 }, onUnload: function () { // 生命周期函数--监听页面卸载 }, onPullDownRefresh: function () { // 页面相关事件处理函数--监听用户下拉动作 }, onReachBottom: function () { // 页面上拉触底事件的处理函数 }, onShareAppMessage: function () { // 用户点击右上角分享 return { title: 'title', // 分享标题 desc: 'desc', // 分享描述 path: 'path' // 分享路径 } }, searchStart: function (e) { var showLetter = e.currentTarget.dataset.letter; var pageY = e.touches[0].pageY; this.setScrollTop(this,showLetter); this.nowLetter(pageY,this); this.setData({ showLetter: showLetter, startPageY: pageY, isShowLetter:true, }) }, searchMove: function (e) { var pageY = e.touches[0].pageY; var startPageY=this.data.startPageY; var tHeight=this.data.tHeight; var bHeight=this.data.bHeight; var showLetter = 0; console.log(pageY); if(startPageY-pageY>0){ //向上移动 if(pageY<tHeight){ // showLetter=this.mateLetter(pageY,this); this.nowLetter(pageY,this); } }else{//向下移动 if(pageY>bHeight){ // showLetter=this.mateLetter(pageY,this); this.nowLetter(pageY,this); } } }, searchEnd: function (e) { // console.log(e); // var showLetter=e.currentTarget.dataset.letter; var that=this; setTimeout(function(){ that.setData({ isShowLetter:false }) },1000) }, nowLetter: function (pageY, that) {//当前选中的信息 var letterData = this.data.searchLetter; var bHeight = 0; var tHeight = 0; var showLetter=""; for (var i = 0; i < letterData.length; i++) { if (letterData[i].tHeight <= pageY && pageY<= letterData[i].bHeight) { bHeight = letterData[i].bHeight; tHeight = letterData[i].tHeight; showLetter = letterData[i].name; break; } } this.setScrollTop(that,showLetter); that.setData({ bHeight:bHeight, tHeight:tHeight, showLetter:showLetter, startPageY:pageY }) }, bindScroll:function(e){ console.log(e.detail) }, setScrollTop:function(that,showLetter){ var scrollTop=0; var cityList=that.data.cityList; var cityCount=0; var initialCount=0; for(var i=0;i<cityList.length;i++){ if(showLetter==cityList[i].initial){ scrollTop=initialCount*30+cityCount*41; break; }else{ initialCount++; cityCount+=cityList[i].cityInfo.length; } } that.setData({ scrollTop:scrollTop }) }, bindCity:function(e){ var city=e.currentTarget.dataset.city; this.setData({city:city}) }})
wxml文件:
<view class="searchLetter touchClass"> <view wx:for="{{searchLetter}}" style="height:{{itemH}}px" wx:key="index" data-letter="{{item.name}}" catchtouchstart="searchStart" catchtouchmove="searchMove" catchtouchend="searchEnd">{{item.name}}</view></view> <block wx:if="{{isShowLetter}}"><view class="showSlectedLetter"> {{showLetter}}</view></block><view>当前选择城市:{{city}}</view><scroll-view scroll-y="true" style="height:{{winHeight}}px" bindscroll="bindScroll" scroll-top="{{scrollTop}}"> <view class="selection" wx:for="{{cityList}}" wx:key="{{item.initial}}"> <view class="item_letter">{{item.initial}}</view> <view class="item_city" wx:for="{{item.cityInfo}}" wx:for-item="ct" wx:key="{{ct.id}}" data-city="{{ct.city}}" bindtap="bindCity"> {{ct.city}} </view> </view></scroll-view>
css文件:
.searchLetter{ position: fixed; right: 0; width: 40px; height: 100%; text-align: center; justify-content: center; display: flex; flex-direction: column; color: #666; z-index: 1}.searchLetter view{ height: 70rpx;}.touchClass{ background-color: rgba(0, 0, 0,0.5); color: #fff;}.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: -50px; width: 100px; height: 100px; border-radius:10px; font-size: 26px; z-index: 1}.selection{ display: flex; width: 100%; flex-direction: column;}.item_letter{ display: flex; background-color: #f8f8f8; height: 30px; padding-left: 10px; align-items: center;}.item_city{ display: flex; background-color: #fff; height: 40px; padding-left: 10px; align-items: center; border-bottom: 1px solid #f8f8f8}
阅读全文
0 0
- 微信小程序实用组件:城市切换
- 微信小程序实用组件:城市切换
- 微信小程序 仿美团城市选择 城市切换
- 微信小程序 城市选择器 城市切换
- 微信小程序 仿美团城市选择 城市切换
- 微信小程序 仿美团城市选择 城市切换
- 微信小程序 仿美团城市选择 城市切换
- 微信小程序之城市切换
- 微信小程序开发之城市选择器 城市切换
- 微信小程序开发之城市选择器 城市切换
- 微信小程序开发之城市选择器 城市切换
- 004 - 微信小程序 仿美团城市选择 城市切换
- 006 - 微信小程序开发之城市选择器 城市切换
- 微信小程序城市天气预报切换显示
- 小程序 城市切换 列表
- 微信小程序实用组件:省市区三级联动
- 微信小程序实用组件:省市区三级联动demo
- 微信小程序中有哪些你需要的实用组件
- C#调用C++写的dll文件出错问题msvcr100.dll
- 以前在新浪写的博客
- servlet及tomcat转载(从ITEYE搬家过来的)
- Intellij idea 下@autowired报错解决(从ITEYE搬家过来的)
- 将博客搬至CSDN
- 微信小程序实用组件:城市切换
- 使用gdb调试多进程和多线程
- JAVA下DES加解密在linux与windows下的兼容问题(从ITEYE搬家过来的)
- Anaconda Jupyter Notebook的使用
- git
- java Enum 枚举帮助类,根据值或者名称获取枚举类型对象(从ITEYE搬家过来的)
- notepad++使用及配置C语言环境
- 接口自动化的手脚架
- Linux 查看端口被谁使用中,停止进程