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


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 相关文章推荐
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
Jun 05 Javascript
js中的push和join方法使用介绍
Oct 08 Javascript
将form表单中的元素转换成对象的方法适用表单提交
May 02 Javascript
在JavaScript中构建ArrayList示例代码
Sep 17 Javascript
使用javascript实现json数据以csv格式下载
Jan 09 Javascript
Javascript函数式编程语言
Oct 11 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
javascript中正则表达式语法详解
Aug 07 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开发模式(简写版)
2007/03/15 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
ionic3 懒加载
2017/08/16 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
Javascript实现秒表计时游戏
2020/05/27 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
python自动12306抢票软件实现代码
2018/02/24 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
初中科学教学反思
2014/01/21 职场文书
高一政治教学反思
2014/01/28 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
公关活动策划方案
2014/05/25 职场文书
2014年医生工作总结
2014/11/21 职场文书
给客户的检讨书
2014/12/21 职场文书
小学四年级学生评语
2014/12/26 职场文书
消费者投诉书范文
2015/07/02 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
python中subplot大小的设置步骤
2021/06/28 Python