摘要: 小程序索引选择器,点击跳转相应条目,索引可滑动,滑动也可跳转

场景:城市选择列表, 汽车品牌选择列表

所用组件: scroll-view(小程序原生) https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html

使用技术: 组件 + API + 一个简单的计算
效果示意:

 
本例数据结构:(你可以把你的数据改成这种结构,当然,掌握方法后可自行调整)

 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>
 js初始数据:
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, 下次见

 

【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)的更多相关文章

  1. 微信小程序开发之picker选择器组件用法

    picker组件时一个从底部弹起的可滚动的选择器(嵌入页面滚动器组件picker-view查看https://mp.weixin.qq.com/debug/wxadoc/dev/component/p ...

  2. 「小程序JAVA实战」 小程序手写属于自己的第一个demo(六)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-06/ 自己尝试的写一个小demo,用到自定义样式,自定义底部导航,页面之间的跳转等小功能.官方文档 ...

  3. 微信小程序-获取当前位置和城市名

    微信小程序-获取当前城市位置 1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting: 2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数) ...

  4. mpvue开发微信小程序之时间+日期选择器

    最近在做微信小程序,技术栈为mpvue+iview weapp组件库. 因项目需求,要用到日期+时间选择器,iview组件库目前还未提供时间日期选择器的组件,小程序官方组件日期时间也是分开的,在简书上 ...

  5. 微信小程序初探--写个扫雷分享给你玩

    闲暇里,想学一下微信小程序, 于是,用微信小程序原生做了个扫雷玩. 以下略作总结,分享给大家. 微信里下拉,输入[mini计算器], 看到这个图标的就是了: 说好的扫雷,怎么变成计算器了?原因后面解释 ...

  6. [微信小程序] 微信小程序下拉滚动选择器picker绑定数据的两种方式

    小程序 picker 多列选择器 数据动态获取 需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 t ...

  7. mpvue微信小程序怎么写轮播图,和官方微信代码的差别

    目前用mpvue很多第三方的ui库是引入不了的,因为它不支持含有dom操作. 那我们要做轮播图的话一个是手写另外一个就是用小程序的swiper组件了: 官方代码: <swiper indicat ...

  8. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  9. 微信小程序手绘地图实现之《Canvas》

    环境:微信SDK2.9+   + uniapp (可切换直接使用.map.js不限制环境) 正题: 先创建一个地图组件 <template> <view class="cu ...

随机推荐

  1. Freemarker入门Demo

    1:工程引入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemark ...

  2. CodeForce 359C Prime Number

    Prime Number CodeForces - 359C Simon has a prime number x and an array of non-negative integers a1,  ...

  3. Autoware 培训笔记 No. 4——寻迹

    1. 前言 好多初创公司公布出来的视频明显都是寻迹的效果,不是说寻迹不好,相反可以证明,寻迹是自动技术开始的第一步. 自动驾驶寻迹:一种能够自动按照给定的路线(通常是采用不同颜色或者其他信号标记来引导 ...

  4. Chrome教程之使用Chrome DevTools命令菜单运行命令

    1.模拟移动设备 点击 Toggle Device Toolbar 2.限制网络流量和 CPU 占用率 要限制网络流量和 CPU 占用率,请从 Throttle 列表中选择 Mid-tier mobi ...

  5. Asp.net HttpContext 简介

    1.  Context    名词解析      Context 直接翻译就是上下文."上下文" 这个名词还是挺让人费解的,是一个非常泛化的概念.刚看到有点让人摸不着头脑,一个高端 ...

  6. [翻译]微软 Build 2019 正式宣布 .NET 5

    原文: Introducing .NET 5 今天,我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 .这将是 .NET 系列的下一个重要版本. 将来只会有一个 .NET ,您 ...

  7. background 设置文本框背景图

    background 属性的作用是给元素设置背景,它是一个复合属性,常用的子属性如下: background-color 指定元素的背景颜色. background-image 指定元素的背景图像. ...

  8. Python - 数据结构 - 第十五天

    Python 数据结构 本章节我们主要结合前面所学的知识点来介绍Python数据结构. 列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和 ...

  9. JavaScript中的 JSON 和 JSONP

    JSON 和 JSONP JSONP是一种发送JSON数据的方法,无需担心跨域问题.JSONP不使用该XMLHttpRequest对象.JSONP使用<script>标签代替.由于跨域策略 ...

  10. 章节十四、2-自动完成功能-Autocomplete

    一.什么是自动匹配功能? 很多网站都有自动匹配功能,列如你在使用天猫搜索商品时,输入“鞋”,输入框的下面会出现很多与“鞋”有关的选项. 二.以https://www.expedia.com/网站的城市 ...