【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)
摘要: 小程序索引选择器,点击跳转相应条目,索引可滑动,滑动也可跳转
场景:城市选择列表, 汽车品牌选择列表
所用组件: scroll-view(小程序原生) https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html

list: [
{
"letter": "A",
"list": [{
"name": "奥迪1",
"id": 1
},
{
"name": "奥迪2",
"id": 2
}]
},
{
"letter": "B",
"list": [{
"name": "宝马1",
"id": 3
},
{
"name": "宝马2",
"id": 4
}]
},
{
"letter": "C",
"list": [{
"name": "麻喇沙底",
"id": 5
},
{
"name": "adidas",
"id": 6
}]
},
{
"letter": "D",
"list": [{
"name": "煲事件",
"id": 7
},
{
"name": "保时捷",
"id": 8
}]
},
{
"letter": "E",
"list": [{
"name": "宝马1",
"id": 9
},
{
"name": "宝马2",
"id": 10
}]
},
{
"letter": "F",
"list": [{
"name": "宝马1",
"id": 11
},
{
"name": "宝马2",
"id": 12
}]
},
{
"letter": "G",
"list": [{
"name": "宝马1",
"id": 15
},
{
"name": "宝马2",
"id": 16
}]
},
{
"letter": "H",
"list": [{
"name": "宝马1",
"id": 17
},
{
"name": "宝马2",
"id": 18
}]
},
{
"letter": "I",
"list": [{
"name": "宝马1",
"id": 19
},
{
"name": "宝马2",
"id": 20
}]
},
{
"letter": "J",
"list": [{
"name": "宝马1",
"id": 21
},
{
"name": "宝马2",
"id": 22
}]
},
{
"letter": "K",
"list": [{
"name": "宝马1",
"id": 23
},
{
"name": "宝马2",
"id": 24
}]
},
]
html 结构:
主体部分
<scroll-view class="content" scroll-y="true" :style="scrollHeight" :scroll-top="scrollData.scrollTop" :scroll-into-view="toView">
<ul class="brandList">
<li v-for="(item, index) in list" :key="index" :id="item.letter">
<h2>{{item.letter}}</h2>
<div v-for="(el, i) in item.list" :key="i" class="pro" @click="getToast(el.name)">
<img src="/static/images/user.png" alt="" mode="aspectFit">
<span>{{el.name}}</span>
</div>
</li>
</ul>
</scroll-view>
// 侧边导航栏
<div class="letterList" @touchstart="handlerTouchMove"
@touchmove="handlerTouchMove"
@touchend="handlerTouchEnd" :style="fixedTop">
<p v-for="(item, index) in list" :key="index" @click="getLetter(item.letter)">{{item.letter}}</p>
</div>
scrollData: {
scrollTop: 0,
},
toView:'A',
step1:
首先,侧边导航栏肯定是用fixed定位固定(一般在右侧),其次在竖直方向居中,调用wx.getSystemInfo
let fixedTop = 0;
let length = this.list.length // 取到list数组的length,因为list的length决定了侧边导航的高度
wx.getSystemInfo({
success(res) {
fixedTop = (res.windowHeight - (20 * length))/2 //20为侧边导航每个p的高度
}
})
step2
手指在侧边导航滑动时的js
handlerTouchMove (e) {
let touches = e.touches[0] || {}
let pageY = touches.pageY
let rest = pageY - this.fixedTop
let index = Math.ceil(rest / 20)
console.log(this.list.length, index, 206);
console.log(index,195);
if(index > this.list.length) {
index = this.list.length - 1//
}
if( 0 <index <= this.list.length) { // 1213 10 9
12 index = index - 1
13 }
14 if(index <= 0) {
15 index = 0
16 }
17 let letter = this.list[index].letter
18 wx.showToast({
19 title: letter,
20 icon: 'none',
21 duration: 2000
22 })
23 this.toView = letter
24 },
25 handlerTouchEnd () {
26 wx.hideLoading()
27 },
step3
点击侧边索引时的js
getLetter (letter) {
this.toView = letter
},
结束惹,88, 下次见
是
【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)的更多相关文章
- 微信小程序开发之picker选择器组件用法
picker组件时一个从底部弹起的可滚动的选择器(嵌入页面滚动器组件picker-view查看https://mp.weixin.qq.com/debug/wxadoc/dev/component/p ...
- 「小程序JAVA实战」 小程序手写属于自己的第一个demo(六)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-06/ 自己尝试的写一个小demo,用到自定义样式,自定义底部导航,页面之间的跳转等小功能.官方文档 ...
- 微信小程序-获取当前位置和城市名
微信小程序-获取当前城市位置 1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting: 2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数) ...
- mpvue开发微信小程序之时间+日期选择器
最近在做微信小程序,技术栈为mpvue+iview weapp组件库. 因项目需求,要用到日期+时间选择器,iview组件库目前还未提供时间日期选择器的组件,小程序官方组件日期时间也是分开的,在简书上 ...
- 微信小程序初探--写个扫雷分享给你玩
闲暇里,想学一下微信小程序, 于是,用微信小程序原生做了个扫雷玩. 以下略作总结,分享给大家. 微信里下拉,输入[mini计算器], 看到这个图标的就是了: 说好的扫雷,怎么变成计算器了?原因后面解释 ...
- [微信小程序] 微信小程序下拉滚动选择器picker绑定数据的两种方式
小程序 picker 多列选择器 数据动态获取 需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 t ...
- mpvue微信小程序怎么写轮播图,和官方微信代码的差别
目前用mpvue很多第三方的ui库是引入不了的,因为它不支持含有dom操作. 那我们要做轮播图的话一个是手写另外一个就是用小程序的swiper组件了: 官方代码: <swiper indicat ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- 微信小程序手绘地图实现之《Canvas》
环境:微信SDK2.9+ + uniapp (可切换直接使用.map.js不限制环境) 正题: 先创建一个地图组件 <template> <view class="cu ...
随机推荐
- CodeForce 577B Modulo Sum
You are given a sequence of numbers a1, a2, ..., an, and a number m. Check if it is possible to choo ...
- java截取字符串中的最后几个字符
Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...
- 【题解】Puzzle [Uva1399]
[题解]Puzzle [Uva1399] 传送门:\(\text{Puzzle [Uva1399]}\) [题目描述] 给定 \(m\) 和 \(n\),表示有 \(m\) 种不同的字符(大写字母\( ...
- yii2.0的学习之旅(一)
一. 通过composer安装yii2.0项目 *本文是根据您已经安装了composer (1)跳转到项目根目录 cd /xxxx/www (2)下载插件 composer global requir ...
- RFC函数的初步使用-同步
1.由于没有外围系统,采用不同SAP不同client之间进行测试. 首先在A-client搭建需要被调用的RFC函数.在A-client里运行SE37创建函数 在属性页签选择“远程启用的模块” 设定i ...
- MVC 表格按树状形式显示 jstree jqgrid
1. 界面顯示 2.前端 jqgrid 代码 //加载表格 function GetGrid() { var selectedRowIndex = 0; var $gridTable = $('#gr ...
- identityServer3+ADFS实现域用户登录授权
准备: ADFS安装配置 https://www.cnblogs.com/luoyedemeng/articles/9837685.html 添加一个Providers private void Co ...
- windows下安装pip教程
下载地址是:https://pypi.python.org/pypi/pip#downloads 下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入: python setup.py i ...
- Vue.js 源码分析(八) 基础篇 依赖注入 provide/inject组合详解
先来看看官网的介绍: 简单的说,当组件的引入层次过多,我们的子孙组件想要获取祖先组件的资源,那么怎么办呢,总不能一直取父级往上吧,而且这样代码结构容易混乱.这个就是这对选项要干的事情 provide和 ...
- 实施一套MES系统需要多少钱?
在制造业深耕的人都知道MES系统对于企业的重要性.MES生产执行系统是制造业生产现场透明化管理的最佳解决方案,制造业工厂通过实施MES系统可以解决生产计划.排产调度.工艺管理.品质管理.现场数据采集和 ...