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


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 相关文章推荐
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
基于javascript实现泡泡大冒险网页版小游戏
Mar 23 Javascript
js简单时间比较的方法
Aug 02 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
React SSR样式及SEO的实践
Oct 22 Javascript
实例讲解React 组件
Jul 07 Javascript
JavaScript前端面试组合函数
Jun 21 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
mysql5写入和读出乱码解决
2006/11/25 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
浅谈Python的异常处理
2016/06/19 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
C++的几个面试题附答案
2016/08/03 面试题
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
成人毕业生自我鉴定
2013/10/18 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
小学主题班会教案
2015/08/17 职场文书