marineparkclient/assets/common/component/List/UI_List.ts
2023-08-15 11:09:12 +08:00

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;
})
}
}