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


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 相关文章推荐
JS 建立对象的方法
Apr 21 Javascript
传递参数的标准方法(jQuery.ajax)
Nov 19 Javascript
JavaScript学习笔记之JS函数
Jan 22 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
Vue SSR 组件加载问题
May 02 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 Javascript
JS实现checkbox互斥(单选)功能示例
May 04 Javascript
webpack项目使用eslint建立代码规范实现
May 16 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 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连接Oracle数据库
2006/10/09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
python判断设备是否联网的方法
2018/06/29 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python自定义一个异常类的方法
2019/06/27 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
tensorflow 变长序列存储实例
2020/01/20 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
小学少先队活动方案
2014/02/18 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
Moment的feature导致线上bug解决分析
2022/09/23 Javascript