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


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 文本框回车跳到下一个文本框示例代码
Aug 30 Javascript
js关于命名空间的函数实例
Feb 05 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
无刷新上传文件并返回自定义值
Jun 11 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 Javascript
js之ajax文件上传
May 13 Javascript
Web应用开发TypeScript使用详解
May 25 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
帅气的琦玉老师
2020/03/02 日漫
谈一谈收音机的高放电路
2021/03/02 无线电
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PDO::exec讲解
2019/01/28 PHP
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python函数式编程实例详解
2020/01/17 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
旅行社各个岗位职责
2014/03/15 职场文书
工程主管竞聘书
2015/09/15 职场文书
nginx配置之并发频次限制
2022/04/18 Servers