详解微信小程序开发之城市选择器 城市切换
发布时间 - 2026-01-10 22:35:21 点击率:次移动开发中城市选择器必不可少.

空白造了个.
gif:
这里只上部分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 })
}
})
demo代码下载
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 微信小程序城市选择器
# 微信小程序地区选择器
# 微信小程序实现自定义picker选择器弹窗内容
# 微信小程序 省市区选择器实例详解(附源码下载)
# 微信小程序三级联动选择器使用方法
# 微信小程序多列选择器range-key使用详解
# 微信小程序三级联动地址选择器的实例代码
# 微信小程序自定义多列选择器使用详解
# 微信小程序 滚动选择器(时间日期)详解及实例代码
# 微信小程序实现联动选择器
# 微信小程序日历弹窗选择器代码实例
# 微信小程序多项选择器checkbox
# 周期函数
# 必不可少
# 大家多多
# 加载
# 触底
# 选择器
# options
# function
# bindCity
# demo
# onLoad
# isShowLetter
# cityList
# scrollTop
# false
# console
# itemH
# windowHeight
# tempObj
# length
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
独立制作一个网站多少钱,建立网站需要花多少钱?
如何解决hover在ie6中的兼容性问题
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
如何在阿里云通过域名搭建网站?
如何在IIS服务器上快速部署高效网站?
Laravel怎么在Blade中安全地输出原始HTML内容
如何在香港免费服务器上快速搭建网站?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
C++时间戳转换成日期时间的步骤和示例代码
Python进程池调度策略_任务分发说明【指导】
Laravel中的Facade(门面)到底是什么原理
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
制作企业网站建设方案,怎样建设一个公司网站?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
免费网站制作appp,免费制作app哪个平台好?
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
用v-html解决Vue.js渲染中html标签不被解析的问题
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在阿里云高效完成企业建站全流程?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何撰写建站申请书?关键要点有哪些?
Laravel中的withCount方法怎么高效统计关联模型数量
新三国志曹操传主线渭水交兵攻略
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
南京网站制作费用,南京远驱官方网站?
如何快速生成高效建站系统源代码?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Android GridView 滑动条设置一直显示状态(推荐)
如何彻底删除建站之星生成的Banner?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何快速查询网站的真实建站时间?
javascript基于原型链的继承及call和apply函数用法分析
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Python面向对象测试方法_mock解析【教程】
如何快速打造个性化非模板自助建站?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
深圳网站制作平台,深圳市做网站好的公司有哪些?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】

