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


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 相关文章推荐
js setTimeout 参数传递使用介绍
Aug 13 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
Mar 13 Javascript
JQuery中Text方法用法实例分析
May 18 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
基于javascript实现图片滑动效果
May 07 Javascript
动态加载js、css的实例代码
May 26 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
three.js 入门案例详解
Jan 23 Javascript
原生JS实现的双色球功能示例
Feb 02 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 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报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
人机交互程序 python实现人机对话
2017/11/14 Python
详解Python中的动态属性和特性
2018/04/07 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
医院义诊活动总结
2014/07/04 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
实习证明格式范文
2015/06/16 职场文书
大学生干部培训心得体会
2016/01/06 职场文书