详解微信小程序开发之城市选择器 城市切换


Posted in Javascript onJanuary 17, 2017

移动开发中城市选择器必不可少.

空白造了个.

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代码下载 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javaScript 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
Feb 28 Javascript
JSON与js对象序列化实例详解
Mar 16 Javascript
简述jQuery Easyui一些用法
Aug 01 jQuery
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
JS实现移动端点击按钮复制文本内容
Jul 28 Javascript
微信小程序实战之运维小项目
Jan 17 #Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 #Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 #Javascript
浅析vue数据绑定
Jan 17 #Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 #Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 #Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 #Javascript
You might like
PHP垃圾回收机制简单说明
2010/07/22 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python中解析json格式文件的方法示例
2017/05/03 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
详解python logging日志传输
2020/07/01 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
生物制药自我鉴定
2014/01/25 职场文书
经典广告词大全
2014/03/14 职场文书
环保志愿者活动方案
2014/08/14 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
简易离婚协议书范本
2014/10/24 职场文书
2015年招聘工作总结
2014/12/12 职场文书
珍爱生命主题班会
2015/08/13 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
基于python实现银行管理系统
2021/04/20 Python
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL