ScrollNav 组件
优质
小牛编辑
129浏览
2023-12-01
1.10.0 新增
滚动导航组件。
示例
基本使用 - Default
<cube-scroll-nav @change="changeHandler"> <cube-scroll-nav-panel v-for="item in data" :key="item.name" :label="item.name"> <ul> <li v-for="food in item.foods"> <div> <img :src="food.icon"> <p>{{food.name}}</p> </div> </li> </ul> </cube-scroll-nav-panel> </cube-scroll-nav>
import goodsData from 'example/data/goods-list.json' const goods = goodsData.goods export default { data() { return { data: goods } }, methods: { changeHandler(label) { console.log('changed to:', label) } } }
goods
的结构类似于这样:"goods": [ { "name": "热销榜", "type": -1, "foods": [ { "name": "皮蛋瘦肉粥", // ... "icon": "http://fuss10.elemecdn.com/c/cd/c12745ed8a5171e13b427dbc39401jpeg.jpeg?imageView2/1/w/114/h/114", "image": "http://fuss10.elemecdn.com/c/cd/c12745ed8a5171e13b427dbc39401jpeg.jpeg?imageView2/1/w/750/h/750" }, // ... ] }, // ... ]
cube-scroll-nav
需要和cube-scroll-nav-panel
组件配合使用,cube-scroll-nav-panel
就是每一个需要导航定位到的面板组件。cube-scroll-nav-panel
组件需要一个必须的 Prop:label
,唯一标示 key 值。当导航 active 项发生变化的时候就会触发
change
事件。侧边式 - Side Style
<cube-scroll-nav :side="true" :data="data" :current="current" @change="changeHandler" @sticky-change="stickyChangeHandler"> <ul class="prepend-header" slot="prepend"> <li>11</li> <li>22</li> <li>333</li> </ul> <cube-scroll-nav-panel v-for="item in data" :key="item.name" :label="item.name" :title="item.name"> <ul> <li v-for="food in item.foods"> <div> <img :src="food.icon"> <p>{{food.name}}</p> </div> </li> </ul> </cube-scroll-nav-panel> </cube-scroll-nav>
import goodsData from 'example/data/goods-list.json' const goods = goodsData.goods export default { components: { CubePage }, data() { return { data: goods, current: goods[3].name } }, methods: { changeHandler(label) { console.log('changed to:', label) }, stickyChangeHandler(current) { console.log('sticky-change', current) } } }
side
设置为true
代表是一个侧边样式效果;data
则是默认传入的数据,这个数据会被传入内部使用的cube-scroll
组件,当data
发生变化时,scroll 组件会自动刷新;current
是导航默认值,如果有值则会默认滚动到相对应的面板 Panel 的位置。sticky-change
就是当前导航条的吸附状态发生改变的时候触发,参数可能的值目前只有两个,一个是''
一个是'cube-scroll-nav-bar'
。此外,这里还在
cube-scroll-nav-panel
之前插入了一些内容,利用prepend
插槽实现。
Props
CubeScrollNav
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
data | 数据源,可选 | Array | - | - |
side | 是否是侧边样式 | Boolean | true/false | false |
current | 当前导航 active 项的 key 值 | String/Number | - | '' |
speed | 点击导航切换到指定位置的速度 | Number | - | 300 |
options | better-scroll 配置项,具体请参考BS 官方文档 | Object | - | {} 注意 :从1.12.38 版本开始,因修复BS在iOS13.4 版本的滚动问题,useTransition 在iOS版本>=13.4时默认为fasle 具体请参考#978 |
CubeScrollNavPanel
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 必须,面板的唯一标示的值 | String/Number | - | - |
title | 面板标题内容,可以是 HTML 字符串 | String/Number | - | 默认等于 label |
插槽
名字 | 说明 | 作用域参数 |
---|---|---|
default | 默认面板内容 | - |
prepend | 前置内容,在导航之前 | - |
bar | 导航内容,如果需要自定义导航结构的话使用,里边放置 cube-scroll-nav-bar 组件 | labels: 所有面板的 label 值集合 txts: 所有面板的 title 值集合 current: 当前导航 active 项的 key 值 |
事件
事件名 | 说明 | 参数 |
---|---|---|
change | 当导航 active 项发生变化的时候 | active - 当前 active 的 key 值 |
sticky-change | 当前导航条的吸附状态发生改变的时候触发 | current - 如果未吸附,则值为 '' 否则为 'cube-scroll-nav-bar' |
实例方法
方法名 | 说明 |
---|---|
refresh | 刷新,当内容或高度发生变化时可用于重新计算整体内容、位置 |