yklist
v1.0.32
Published
一个简洁、强大、易用、高性能的VueJS列表显示控件。 如果您对YKList有更多功能需求或建议,请给我留言。 如果您希望扩展和完善YKList,欢迎加入!
Downloads
8
Maintainers
Readme
YKList
一个简洁、强大、易用、高性能的VueJS列表显示控件。 如果您对YKList有更多功能需求或建议,请给我留言。 如果您希望扩展和完善YKList,欢迎加入!
关键特性
高性能.支持海量数据的列表显示; 数据显示的瓶颈取决于计算机的内存大小和数据准备的时间;数据显示的效率接近操作系统原生的 列表性能。
一个列表控件即可同时支持垂直列表和水平列表。例如:只需要在控件初始化时设置 "horizontal: true", 即可控制列表的滚动方向为水平。 垂直、水平的显示可以随时切换,无须重新载入页面。
支持键盘导航。上、下、左、右箭头,以及page up, page down, home ,end可以方便的切换热点元素。
默认支持鼠标框选。按下鼠标不放,拖动鼠标即可完成矩形多选。鼠标框选的自动滚动。
默认支持键盘+键盘的组合选择。支持点击鼠标/按下方向键时,和shift/ctrl一起控制选择范围。
内置易用、精简的事件自定义处理,可精确探测任意点击位置下的列表元素。
动态数据修改
- 可以动态全部替换数据
- 可以动态删除指定元素
- 可以动态添加元素
- 可以动态修改列表水平/垂直方向
- 可以动态修改列表元素尺寸
灵活、自由的功能扩展支持
- 通过开放的slot接口,可以访问和自定义每一个元素的外观、行为;
- 包括轻松实现包括拖拽在内的自定义元素交互;
使用MIT许可证. 可随意应用于商业用途。
快速开始:
安装
npm install yklist
在项目中引用YKList
import YKList from "yklist";
import "yklist/dist/yklist.css";
简单示例:
<template>
<YKList ref="ykList1" :settings="settings" :listData="listData" height="600px">
<template v-slot:YKListItems="YKListItems">
<div style="user-select: none;">
{{ YKListItems.item.name }}, {{ YKListItems.index }}
</div>
</template>
</YKList>
</template>
import YKList from "yklist";
import "yklist/dist/yklist.css";
export default {
name: 'App',
components: {
YKList
},
listData: [{name:'name1'},{name:'name2'},{name:'name3'}],
data() {
return {
settings: {
id: "ykList1",
keyNaviBy: "name",
}
},
}
使用说明
初始化设置 settings
属性|说明|示例 --|:--:|--: id|必须,唯一标识|id: "ykList1" keyNaviBy|可选; 在列表数据中选择一列启用键盘字符导航|keyNaviBy: "name" itemSize|可选;设置列表元素的尺寸|itemSize: {width:200,height:50} horizontal|可选;设置是否为水平列表|horizontal:true checkBeforeDragSelection|可选, 自定义一个方法,在鼠标拖动选择前进行检查,如果方法返回false则不允许拖动选择|checkBeforeDragSelection: function (event, itemInfo){return false;}
初始化设置 - listData
存储列表数据的json数组,例如: [{name:"name-1", id:1},...{name:"name-n", id:n}]
初始化设置 - height
设置列表高度,您可以在运行时调用setHeight方法,或者修改height的值动态改变列表高度
方法
方法|说明|示例 --|:--|--: setHeight|设置YKList的高度, 高度可以是px或者百分比| this.$refs.ykList1.setHeight("800px"); setItemSize|设置列表元素的尺寸| this.$refs.ykList1.setItemSize({width:200, height:36}); setHorizontal|设置列表是否水平滚动|this.$refs.ykList1.setHorizontal(!this.$refs.ykList1.getHorizontal()); appendItem|添加一个元素到列表末尾|this.$refs.ykList1.appendItem({name: 'yklist123'}); removeItems|删除列表元素,输入参数为数组|this.$refs.ykList1.removeItems(this.$refs.ykList1.getSelectedItems()); getItemsData|获取一组元素对应的数据|console.log(this.$refs.ykList1.getItems(this.$refs.ykList1.getSelectedItems())); getItemData|获取一个元素对应的数据|console.log(this.$refs.ykList1.getItemData(this.$refs.ykList1.getHotItem())); setListData|动态改变列表数据|this.$refs.ykList1.setListData(newListData); getSelectedItems|获取被选中的元素数组|var selectedItems=this.$refs.ykList1.getSelectedItems();
事件
- onListClick(event, itemInfo) 列表被单击时触发,用于获取鼠标点击位置下的坐标、列表元素信息 例如:
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onListClick="onListClick"
>
....
onListClick(event, itemInfo) {
console.log("onListClick", event, itemInfo);
},
- onListDblClick(event, itemInfo) 列表被双击时触发,用于获取鼠标点击位置下的坐标、列表元素信息 例如:
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onListDblClick="onListDblClick"
>
....
onListDblClick(event, itemInfo) {
console.log("onListDblClick", event, itemInfo);
},
- onMouseMove(event, itemInfo) 鼠标移动过程中,对鼠标位置、元素进行探测 例如:
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onMouseMove="onMouseMove"
>
....
onMouseMove(event, itemInfo) {
console.log("onMouseMove", event, itemInfo);
},
- onItemUnderMouseChanged(itemInfo) 鼠标在列表范围内移动时,会不断探测鼠标坐标下的列表元素,如果探测到的元素和上一次探测的结果不一样,则触发本事件
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onItemUnderMouseChanged="onItemUnderMouseChanged"
>
....
onItemAtMouseChanged(itemInfo) {
console.log("onItemUnderMouseChanged", itemInfo);
},
- onSelectedChange(valNew) 当存储已选中元素的索引的数组发生改变时触发
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onSelectedChange="onSelectedChange"
>
....
onSelectedChange(valNew) {
console.log("onSelectedChange", valNew);
},
- onContextMenu(event, itemInfo) 右键进行点击时
<YKList ref="ykList1" :settings="settings" :listData="listData" :height="height"
@onContextMenu="onContextMenu"
>
....
onContextMenu(event, itemInfo) {
console.log("onContextMenu", event, itemInfo);
},