2017年7月13日,,,,微信小程序开发实例解说之微信小程序三级联动地点选择器,,,,许多人都想问微信小程序三级联动地点选择器?下面从多个方面来谈谈微信小程序三级联动地点选择器。。。
7月16日最先,,,,阿里巴巴国际站将实验重复铺货处分新规。。。关于重复铺货商品占“审核通过且已上架”商品量≥10%且重复铺货商品数≥100的商家,,,,或者,,,,店肆重复铺货产品数≥1000的商家,,,,阿里巴巴国际站将凭证规则举行处分和通知。。。
在一些电商类的小程序中,,,,地点选择这个功效一般是必备的,,,,一般的收货信息都需要有一个能选择省市县的控件,,,,虽然也有些人为了省事就直接写了一个供输入的input,,,,那么这样做的弱点不言而喻,,,,并且用户体验也不是那么的好,,,,今天的这篇文章就分享一下微信小程序地点选择的实现。。。省市县的数据以及区域码可以从国家统计局盘问到,,,,详细可以自己搜一下。。。照例先上源码和效果图
源码传送门
在正式介绍实现之前,,,,我们需要先来介绍下这两个组件,,,,picker这个组件在前面的文章有简朴介绍过,,,,它是从底部弹起的转动选择器,,,,可以通过设置type的值来实现日期选择,,,,时间选择以及通俗的选择器,,,,若是我们想实现上图三级联动地点选择效果,,,,发明实现起来很难题,,,,应该说是不可实现,,,,由于picker通俗选择器是只能有一列,,,,若是想这实现三列的效果就需要另辟蹊径了。。。
既然是另辟蹊径,,,,自然就会想到picker-view,,,,该组件是一个嵌入页面的转动选择器,,,,该组件中可以放置多个picker-view-column,,,,并且只能放置picker-view-column,,,,其它组件是不会显示的,,,,每一个picker-view-column就是一列。。。
picker-view有几个主要的属性,,,,value是一个数组类型,,,,数组中的数字依次体现 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 最先),,,,数字大于 picker-view-column 可选项长度时,,,,选择最后一项。。。indicator-style和indicator-class可以设置选择器中心选中框的样式,,,,他有一个事务bindchange,,,,当我们转动item时选择的item数据爆发转变就会触发这个函数,,,,并且可以通过event.detai.vaule(和上面介绍vaule寄义相同)获取目今选择的是第几项(下标从 0 最先)。。。而关于picker-view-column高度会自动设置成与picker-view的选中框的高度一致。。。
省市县数据文件 存储了地点选择所需要用到的数据,,,,主要是区域码和名字,,,,然后通过下面代码将数据袒露出去,,,,以供使用
module.exports = {
citys,
provinces,
areas
}
wxml文件实现
<view class="picker-view" animation="{{animationAddressMenu}}" style="visibility:{{addressMenuIsShow ? 'visible':'hidden'}}">
<view style="height:10% ;width:95%;margin-top:10rpx">
<text catchtap="cityCancel">作废text>
<text style="float: right" catchtap="citySure">确定text>
view>
<picker-view style="width: 100%; height: 300px;" bindchange="cityChange" value="{{value}}" wx:key="">
<picker-view-column>
<view wx:for="{{provinces}}" class="picker-item">
{{item.name}}view>
picker-view-column>
<picker-view-column>
<view wx:for="{{citys}}" class="picker-item" wx:key="">
{{item.name}}view>
picker-view-column>
<picker-view-column>
<view wx:for="{{areas}}" class="picker-item" wx:key="">
{{item.name}}view>
picker-view-column>
picker-view>
view>
主要就是上面有一个作废和确定供用户点击确认选择,,,,以及picker-view 中包括三个picker-view-column组件,,,,划分对应显示省市区,,,,provinces,,,,citys,,,,areas是对应的数据,,,,animation是选择控件可见或者不可见时的过渡动画。。。
样式wxss文件
.picker-view {
width: 100%;
display: flex;
z-index:12;
background-color: #fff;
flex-direction: column;
justify-content: center;
align-items: center;
position: fixed;
bottom: 0rpx;
left: 0rpx;
height: 40vh;
}
.picker-item {
line-height: 70rpx;
margin-left: 5rpx;
margin-right: 5rpx;
text-align: center;
}
在js中我们在data中加入数据
/**
* 控件目今显示的数据
* provinces:所有省份
* citys 选择省对应的所有市,
* areas选择市对应的所有区
* areaInfo:点击确准时选择的省市县字符拼接
* animationAddressMenu:动画
* addressMenuIsShow:是否可见
*/
data: {
animationAddressMenu: {},
addressMenuIsShow: false,
value: [0, 0, 0],
provinces: [],
citys: [],
areas: [],
areaInfo:''
},
最主要的是在js文件最先处引入数据文件
var address = require('../../utils/city.js')
onLoad中初始化数据,默认显示北京
// 默认联动显示北京
var id = address.provinces[0].id
this.setData({
provinces: address.provinces,
citys: address.citys[id],
areas: address.areas[address.citys[id][0].id],
})
事务的处理逻辑:
// 点击所在地区弹出选择框
selectDistrict: function (e) {
var that = this
// 若是已经显示,,,,不在执行显示动画
if (that.data.addressMenuIsShow) {
return
}
// 执行显示动画
that.startAddressAnimation(true)
},
// 执行动画
startAddressAnimation: function (isShow) {
console.log(isShow)
var that = this
if (isShow) {
// vh是用来体现尺寸的单位,,,,高度全屏是100vh
that.animation.translateY(0 + 'vh').step()
} else {
that.animation.translateY(40 + 'vh').step()
}
that.setData({
animationAddressMenu: that.animation.export(),
addressMenuIsShow: isShow,
})
},
// 点击地区选择作废按钮
cityCancel: function (e) {
this.startAddressAnimation(false)
},
// 点击地区选择确定按钮
citySure: function (e) {
var that = this
var city = that.data.city
var value = that.data.value
that.startAddressAnimation(false)
// 将选择的都会信息显示到输入框
var areaInfo = that.data.provinces[value[0]].name + ',' + that.data.citys[value[1]].name + ',' + that.data.areas[value[2]].name
that.setData({
areaInfo: areaInfo,
})
},
// 点击蒙版时作废组件的显示
hideCitySelected: function (e) {
console.log(e)
this.startAddressAnimation(false)
},
// 处理省市县联动逻辑
cityChange: function (e) {
console.log(e)
var value = e.detail.value
var provinces = this.data.provinces
var citys = this.data.citys
var areas = this.data.areas
var provinceNum = value[0]
var cityNum = value[1]
var countyNum = value[2]
// 若是省份选择项和之前纷歧样,,,,体现滑动了省份,,,,此时市默认是省的第一组数据,,,,
if (this.data.value[0] != provinceNum) {
var id = provinces[provinceNum].id
this.setData({
value: [provinceNum, 0, 0],
citys: address.citys[id],
areas: address.areas[address.citys[id][0].id],
})
} else if (this.data.value[1] != cityNum) {
// 滑动选择了第二项数据,,,,即市,,,,此时区显示省市对应的第一组数据
var id = citys[cityNum].id
this.setData({
value: [provinceNum, cityNum, 0],
areas: address.areas[citys[cityNum].id],
})
} else {
// 滑动选择了区
this.setData({
value: [provinceNum, cityNum, countyNum]
})
}
console.log(this.data)
},
关于事务处理,,,,联动的处理逻辑,,,,需要诠释的我已在代码实现中做相识释,,,,也没有什么较量难以明确的内容,,,,就不在过多介绍,,,,到这里微信小程序省市县三级联动效果已经实现了。。。若是阅读本文的你发明文中有不当或者过失的地方,,,,接待指正,,,,在此谢过。。。Hava a wonderful day。。。
想相识更多关于微信小程序开发实例教程内容,,,,可以点击阅读微信小程序开发教程。。。
KESION pp电子软件
KESION pp电子软件是海内领先的在线教育软件及私域社交电商软件服务提供商,,,,恒久专注于为企业提供在线教育软件及社交电商SaaS平台解决方案。。。
公司焦点产品云开店SaaS社交电商服务平台、在线教育SaaS服务平台、教育企业数字化SaaS云平台、企微营销助手、私有化自力安排品牌网校和在线教育咨询等。。。KESION 一直通过手艺立异,,,,提供产品和服务,,,,助力企业向数字化转型,,,,通过科技驱动商业刷新,,,,让商业变得更智慧!
微信小程序开发实例解说之微信小程序变量值共用,,,,许多人都想问微信小程序变量值共用?下面从多个方面来谈谈微信小程序变量值共用。。。...
[db:导读]...