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


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 写类方式之十
Jul 05 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
使用Raygun对Node.js应用进行错误处理的方法
Jun 23 Javascript
js实现点击切换TAB标签实例
Aug 21 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
node.js中cluster的使用教程
Jun 09 Javascript
javascript中神奇的 Date对象小结
Oct 12 Javascript
vue element table 表格请求后台排序的方法
Sep 28 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
微信小程序实现星星评分效果
Nov 01 Javascript
为什么node.js不适合大型项目
Apr 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把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
django 外键model的互相读取方法
2018/12/15 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
Pygame框架实现飞机大战
2020/08/07 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
经典婚礼主持开场白
2014/03/13 职场文书
植树节标语
2014/06/27 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书