微信小程序实现全国机场索引列表


Posted in Javascript onJanuary 31, 2018

本文为大家分享了微信小程序实现MUI索引列表的具体代码,供大家参考,具体内容如下

效果展示图

微信小程序实现全国机场索引列表

实现的原理

  • ‘当前选择机场'和右侧的导航栏采用的是固定定位;
  • 左侧的展示窗口的滚动采用的是scroll-view组件;
  • 选择中的字母提示是自己WXSS样式制作。

WXML

<view class="right-nav">
 <view bindtap="getCurrentCode" class="{{chooseIndex == index ? '.city-list-active' : ''}}" wx:for="{{cityList}}" style="height:{{codeHeight}}px" data-code="{{item.code}}">
 {{item.code}}
 </view>
</view>

<view class="city-layer {{isShowLayer ? '' : 'layer-hide'}}">
 {[code]}
</view>

<view class="current-choose-city">当前选择机场:{{chooseCity}}</view>
<scroll-view class="city-scroll" scroll-y="true" style="height:{{cityHeight}}px" bindscroll="scroll" scroll-top="{{scrollTop}}">
 <view class="city-box" wx:for="{{cityList}}" wx:key="{{item.code}}">
  <view class="city-code">{{item.code}}</view>
  <view class="city-list" wx:for="{{item.cityList}}" wx:for-item="city" bindtap="getChooseCity" data-city="{{city}}"> 
    {{city}} 
  </view> 
 </view>
</scroll-view>

WXSS

.current-choose-city{
 position: fixed;
 width: 100%;
 height: 50px;
 line-height: 50px;
 padding: 0 10px;
 top: 0;
 left: 0;
 background-color: #fff;
 z-index: 10;
}
.right-nav{
 width: 30px;
 color: #888;
 text-align: center;
 position: fixed;
 bottom: 0;
 right: 0;
 background-color: rgb(200, 200, 200);
 z-index: 9;
}
.city-scroll{padding-top: 50px;}
.city-code{
 background-color: #f7f7f7;
}
.city-list,.city-code{
 height: 39px;
 line-height: 40px;
 padding: 0 30px 0 10px;
 overflow: hidden;
 border-bottom: 1px solid #c8c7cc;
}
.city-list-active{color:#007aff;}

/*提示点击的字母 */
.city-layer{
 width: 70px;
 height: 70px;
 line-height: 70px;
 text-align: center;
 border-radius: 50%;
 color: #fff;
 background-color: rgba(0, 0, 0, .7);
 position: fixed;
 top: calc(50% - 35px);
 left:calc(50% - 35px);
 z-index: 11;
}
.layer-hide{display: none;}

JS

var city_list = require('./city.js');

Page({
 data: {
 cityList: city_list.city,
 chooseCity: '您还未选择机场!',
 isShowLayer: false,
 chooseIndex: 0,
 len: [],
 code: null,
 codeHeight: null,
 cityHeight:null,
 scrollTop: 0
 },
 onLoad (options) {
 var windowHeight = wx.getSystemInfoSync().windowHeight;
 var arr = [];

 this.data.cityList.forEach(current => arr.push(current.cityList.length + 1));
 this.setData({ 
  codeHeight: (windowHeight - 50) / this.data.cityList.length,
  cityHeight: windowHeight - 50,
  len: arr
 });
 },
 getCurrentCode(e){
 var index = 0, sum = 0,self = this;

 for (var i = 0; i < this.data.cityList.length;i++){
  if (this.data.cityList[i].code === e.target.dataset.code){
  index = i
  break;
  }
 }
 for (var j = 0; j < index; j++) {
  sum += this.data.len[j];
 }

 this.setData({ 
  code: e.target.dataset.code,
  scrollTop: sum * 40,
  chooseIndex: index,
  isShowLayer: true  
 });

 setTimeout(() => {
  self.setData({ isShowLayer: false })
 },500);
 },
 getChooseCity(e){
 this.setData({ chooseCity: e.target.dataset.city });
 }
})

总结:

在onLoad函数中设置左侧的展示高度和右侧导航每一个字母所在盒子的高度;
getCurrentCode函数是获取点击字母的index,然后进行提示以及500ms后关闭提示;
getChooseCity函数是获取选择的机场,对chooseCity进行赋值。

代码简化:

var index = 0;
for (var i = 0; i < this.data.cityList.length;i++){
 if (this.data.cityList[i].code === e.target.dataset.code){
 index = i
 break;
 }
}

简化为:

添加data-index="{{index}}",减少循环的消耗:
<view bindtap="getCurrentCode" class="{{chooseIndex == index ? '.city-list-active' : ''}}" wx:for="{{cityList}}" style="height:{{codeHeight}}px" data-code="{{item.code}}" data-index="{{index}}">
var index = e.target.dataset.index;

DEMO下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 原型模式实现OOP的再研究
Apr 09 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
jQuery选择器全集详解
Nov 24 Javascript
JS和JQ的event对象区别分析
Nov 24 Javascript
javascript中类的定义方式详解(四种方式)
Dec 22 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
jQuery动态产生select option下拉列表
Mar 15 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
JS面向对象编程实现的Tab选项卡案例详解
Mar 03 Javascript
微信小程序radio组件使用详解
Jan 31 #Javascript
微信小程序checkbox组件使用详解
Jan 31 #Javascript
原生JS实现多个小球碰撞反弹效果示例
Jan 31 #Javascript
浅析Angular19 自定义表单控件
Jan 31 #Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 #Javascript
微信小程序switch开关选择器使用详解
Jan 31 #Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 #Javascript
You might like
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
Django框架model模型对象验证实现方法分析
2019/10/02 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
python计算auc的方法
2020/09/09 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
财务部岗位职责
2013/11/19 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
大一军训感言
2014/01/09 职场文书
办公室文员工作职责
2014/01/31 职场文书
收银员岗位职责
2015/02/03 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python