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


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 相关文章推荐
jquery $.ajax入门应用二
Nov 19 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
JS操作HTML自定义属性的方法
Feb 10 Javascript
JQuery遍历DOM节点的方法
Jun 11 Javascript
浅析javascript的return语句
Dec 15 Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
详解vue嵌套路由-query传递参数
May 23 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
iview实现图片上传功能
Jun 29 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利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
js 单引号 传递方法
2009/06/22 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
我就是这样学习Python中的列表
2019/06/02 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python连接Impala实现步骤解析
2020/08/04 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
一个C/C++编程面试题
2013/11/10 面试题
J2EE模式面试题
2016/10/11 面试题
计算机求职信
2013/12/01 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
党组织公开承诺书
2014/03/29 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
党员检讨书范文
2014/12/27 职场文书
就业推荐表院系意见
2015/06/05 职场文书
冰雪公主观后感
2015/06/16 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
Python读写yaml文件
2022/03/20 Python