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


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入门·动态的时钟,显示完整的一些方法,新年倒计时
Oct 01 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
Lab.js初次使用笔记
Feb 28 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
Angular ng-repeat 对象和数组遍历实例
Sep 14 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
React中的refs的使用教程
Feb 13 Javascript
JS实现图片旋转动画效果封装与使用示例
Jul 09 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 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
PHP5 面向对象程序设计
2008/02/13 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
phplot生成图片类用法详解
2015/01/06 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php实现json编码的方法
2015/07/30 PHP
Laravel下生成验证码的类
2017/11/15 PHP
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
python如何调用php文件中的函数详解
2020/12/29 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
求职信格式要求
2014/05/23 职场文书
平面设计师岗位职责
2014/09/18 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
检讨书范文2000字
2015/01/28 职场文书
活动简报范文
2015/07/22 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
Python first-order-model实现让照片动起来
2022/06/25 Python