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


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选择器-根据多个属性选择示例代码
Oct 21 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 jQuery
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
Mar 05 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
JavaScript常见事件对象与操作实例总结
Jan 05 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 Javascript
vue回到顶部监听滚动事件详解
Aug 02 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之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python中的filter()函数的用法
2015/04/27 Python
scrapy爬虫完整实例
2018/01/25 Python
浅析Python四种数据类型
2018/09/26 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
互联网创业计划书的书写步骤
2014/01/28 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
党的作风建设心得体会
2014/10/22 职场文书
中秋联欢会主持词
2015/07/04 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP