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


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 模板数据绑定插件的使用方法详解
Jul 08 Javascript
javascript中数组的sort()方法的使用介绍
Dec 18 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
jQuery 判断是否包含在数组中Array[]的方法
Aug 03 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
微信小程序实现底部导航
Nov 05 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
Javascript表单序列化原理及实现代码详解
Oct 30 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
微信小程序实战之运维小项目
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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
做web开发 先学JavaScript
2014/12/12 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python插入数据到列表的方法
2015/04/30 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python实现给数组按片赋值的方法
2015/07/28 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
服装厂厂长岗位职责
2013/12/27 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
树转促学习心得体会
2014/09/10 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS