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


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 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
有关DOM元素与事件的3个谜题
Nov 11 Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
Dec 05 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
Layui点击图片弹框预览的实现方法
Sep 16 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
ajax实现无刷新分页(php)
2010/07/18 PHP
php生成随机颜色的方法
2014/11/13 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python使用minidom读写xml的方法
2015/06/03 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
历史学专业推荐信
2013/11/06 职场文书
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
北京申奥口号
2014/06/19 职场文书
Python使用永中文档转换服务
2022/05/06 Python