Appearance
ul
ES 的重点功能,高性能的可复用列表组件。里面第一层只能包含 <li>
。
属性
参数 | 描述 | 类型 |
---|---|---|
horizontal | 开启横向列表模式,默认为false。 | boolean |
numberOfRows | 指定列表的行数,一般直接传入数据源条数 length 即可。 | number |
initialContentOffset | 初始位移值 -- 在列表初始化时即可指定滚动距离,避免初始化后再通过 scrollTo 系列方法产生的闪动。 | number |
scrollEventThrottle | 指定滑动事件的回调频率,传入数值指定了多少毫秒(ms)组件会调用一次 onScroll 回调事件,默认 200ms | number |
showScrollIndicator | 是否显示垂直滚动条。 因为目前 ListView 其实仅有垂直滚动一种方向,水平滚动会导致 onEndReached 等一堆问题暂不建议使用,所以 showScrollIndicator 也仅用来控制是否显示垂直滚动条。 | boolean |
preloadItemNumber | 预加载:指定当列表滚动至倒数第几个时触发 onLoadMore 回调。 | number |
disableAdvancedFocusSearch | 关闭ul 寻焦性能优化,在某些不正常情况下,可尝试关闭,默认开启 | boolean |
endHintEnabled | 设置是否开启底部回弹反馈效果 | boolean |
focusMemory | 设置是否记忆列表上次选中焦点的问题 | boolean |
initFocusPositionAfterLayout | 设置在ul 布局完成后,首次获得焦点的子View | number |
listenFocusSearchOnFail | 设置是否监听在ul 内部寻焦失败事件 | number |
makeChildVisibleType | 设置子View 获得焦点时,如果展示不完整,如何滚动ul 的方式,分别为normal 和center | string |
makeChildVisibleClampBackward | 设置子View 获得焦点时,如果展示不完整,向前滚动ul 时设置的偏移量 | number |
makeChildVisibleClampForward | 设置子View 获得焦点时,如果展示不完整,向后滚动ul 时设置的偏移量 | number |
enableSelectOnFocus | 设置子View 的select 状态是否跟随焦点的变化而变化 | number |
scrollStateChangeEnabled | scrollStateChanged 事件开关,默认true | boolean |
clipChildren | 设置是否将超出边界的子View 切除 | boolean |
descendantFocusability | 设置焦点的分发方式,0 为在后代元素前,1 为在后代元素后,2 为阻止分发 | int |
*blockFocusDirections | 当div 内部寻焦为空时,是否拦截焦点 | Array |
nextFocusName | 按下媒体键下一个焦点的目标 | Map(left:'',right:'',up:'',down:'') |
disableAdvancedFocusSearch | 关闭默认的焦点搜索方式。默认ul优先在列表内部寻焦以提高效率 | boolean |
listenBoundEvent | 是否开启on-bind,un-bind事件监听 | boolean |
setUseNegativeLayout | 是否打开消极的layout方式,兼容性api,防止某些场景列表频繁刷新。 | boolean |
*initPosition | 列表初始化时一些滚动位置、初始化焦点等设置 | map |
scrollThresholdHorizontal | 焦点在列表内部横向焦点变化时,小于此值的滚动会被忽略 | number |
scrollThresholdVertical | 焦点在列表内部纵向焦点变化时,小于此值的滚动会被忽略 | number |
shakePreCheckNumber | 底部回弹效果触发时距最后一个item的个数 | number |
blockFocusDirections
中需传递一个Array
,分别用up
、down
、left
、right
代表上下左右的方向:例如
点击查看源码
html
<div :blockFocusDirections="blockDirections"></div>
点击查看源码
javascript
blockDirections: ['left', 'right', 'up', 'down']
initPosition
参数:
点击查看源码
javascript
//示例:滚动至位置1,并且让第2个child获得焦点
initPosition={
focusPosition:2, //焦点位置
scrollToPosition:1, //滚动位置
scrollOffset:0,//偏移量
delay:50,//执行delay时间(毫秒)
force:true//是否强制刷新
}
事件
事件名称 | 描述 | 类型 |
---|---|---|
endReached | 当所有的数据都已经渲染过,并且列表被滚动到最后一条时,将触发 onEndReached 回调。 | Function |
momentumScrollBegin | 在 ScrollView 开始滑动的时候调起 | Function |
momentumScrollEnd | 在 ScrollView 结束滑动的时候调起 | Function |
scrollStateChanged | 当触发 ListView 的滑动状态时回调,Event.newState:1(开始滑动)、Event.newState:2(滑动中)、Event.newState:0(滑动结束)、Event.offsetX(x轴坐标)、Event.offsetY(x轴坐标) | Function |
scroll | 当触发 ListView 的滑动事件时回调,在 ListView 滑动时回调,因此调用会非常频繁,请使用 scrollEventThrottle 进行频率控制。 注意:ListView 在滚动时会进行组件回收,不要在滚动时对 renderRow() 生成的 ListItemView 做任何 ref 节点级的操作(例如:所有 callUIFunction 和 measureInWindow 方法),回收后的节点将无法再进行操作而报错。Event.offsetX(x轴坐标)、Event.offsetY(x轴坐标) | Function |
loadMore | 当需要分页 加载数据时,将触发 onLoadMore 回调,会触发此函数,可配合参数(preloadItemNumber)使用 | Function |
childFocus | 同div 相同 | Function |
item-bind | ul中一个item创建时回调 | Function (通过参数position获得item位置) |
item-unbind | ul中一个item回收利用时回调 | Function (通过参数position获得item位置) |
方法
scrollTo
(xOffset: number, yOffset: number: duration: number) => void
通知 ListView
滑动到某个具体坐标偏移值(offset)的位置。
xOffset
: number - 滑动到 X 方向的 offsetyOffset
: numbere - 滑动到 Y 方向的 offsetduration
: number - 多长事件滚到指定位置
scrollToIndex
(xIndex: number, yIndex: number: animated: boolean) => void
通知 ListView
滑动到第几个 item
。
xIndex
: number - 滑动到 X 方向的第 xIndex 个 itemyIndex
: numbere - 滑动到 Y 方向的 xIndex 个 itemanimated
: boolean - 滑动过程是否使用动画
setInitPosition
(info : map) => void
通知 ListView
滚动并请求焦点。 示例:
点击查看源码
js
let toFocus = {
focusPosition: 4, //请求焦点的position
scrollToPosition: 3,//滚动的目标position
scrollOffset:0, //滚动的偏移量
force:true, //强制刷新列表
}
//滚动至第三个item的位置并且让第四个item请求焦点
Vue.Native.callUIFunction(this.$refs.ul, 'setInitPosition',[toFocus])
requestChildFocus
(position: number) => void
通知 ListView
第几个子 item
获得焦点。
position
: 子item在列表中的index值
setTargetFocusChildPosition
(position: number) => void
ListView 在没有焦点时,第几个item
会优先获得焦点。
position
: 子item在列表中的index值
scrollToTop
scrollToTop() => void
通知 ListView
滚动回初始位置。
setSelectChildPosition
(position: number) => void
通知 ListView
第几个子 item
获得select状态。
setTargetFocusChildPosition
(position: number) => void
ListView
在初次获得焦点时,被首先寻焦的位置。
refreshListData
ListView
手动刷新列表
getScrollOffset
getScrollOffset(promise:function) 获取当前View滚动位置
this.$refs.current.getScrollOffset().then((pos)=>{
//pos.x
//pos.y
})