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


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 相关文章推荐
原来Jquery.load的方法可以一直load下去
Mar 28 Javascript
jquery 插件学习(四)
Aug 06 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
jquery防止重复执行动画避免页面混乱
Apr 22 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
Feb 08 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
Node.js使用gm拼装sprite图片
Jul 04 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
Apr 09 Javascript
浅谈vuex中store的命名空间
Nov 08 Javascript
vue将文件/图片批量打包下载zip的教程
Oct 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
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
有关php运算符的知识大全
2011/11/03 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
php去除数组中重复数据
2014/11/18 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
Prototype Object对象 学习
2009/07/12 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
利用Python批量生成任意尺寸的图片
2016/08/29 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python读取YAML文件过程详解
2019/12/30 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
运动会领导邀请函
2014/01/10 职场文书
美德少年事迹材料
2014/01/23 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
完美的中文自荐信
2014/05/24 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014年建筑工作总结
2014/11/26 职场文书
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python