60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import UI_ListItem from "./UI_ListItem";
|
|
import VirtualList from "./VirtualList";
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
@ccclass
|
|
export default class PM_UI_List<T> extends cc.Component {
|
|
|
|
@property(cc.Node)
|
|
itemContainer: cc.Node = null;
|
|
@property(cc.Node)
|
|
copyeeItem: cc.Node = null;
|
|
@property(cc.ScrollView)
|
|
scroll: cc.ScrollView = null;
|
|
mItems: cc.Node[] = [];
|
|
|
|
////// 虚拟列表 begin ///////
|
|
@property
|
|
isVirtual: boolean = false;
|
|
@property({ type: cc.Integer, tooltip: "视口显示数量(用于虚拟列表)" })
|
|
viewPortItemCount: number = 1;
|
|
////// 虚拟列表 end ///////
|
|
|
|
private addItems(data: T[]) {
|
|
let _len = data.length;
|
|
for (let i = 0; i < _len; i++) {
|
|
let _item = cc.instantiate(this.copyeeItem);
|
|
let _dataItem = data[i];
|
|
this.mItems.push(_item);
|
|
let _itemCls = _item.getComponent(UI_ListItem);
|
|
_itemCls.showInfo(_dataItem);
|
|
_itemCls.itemData = _dataItem;
|
|
|
|
this.itemContainer.addChild(_item);
|
|
}
|
|
}
|
|
|
|
private mVirtualListMrg:VirtualList;
|
|
private mListData: T[];
|
|
showList(data: T[]) {
|
|
this.mListData = data;
|
|
this.initDataIdx();
|
|
this.itemContainer.removeAllChildren();
|
|
if (!this.isVirtual) {
|
|
this.addItems(data);
|
|
}
|
|
else {
|
|
if(!this.mVirtualListMrg){
|
|
this.mVirtualListMrg = new VirtualList();
|
|
}
|
|
this.mVirtualListMrg.initVirtualList(this.viewPortItemCount,this.mListData,this.itemContainer,this.scroll,this.copyeeItem)
|
|
}
|
|
}
|
|
|
|
private initDataIdx() {
|
|
this.mListData.forEach((item, idx) => {
|
|
item["_list_idx_"] = idx;
|
|
})
|
|
}
|
|
}
|