import { _decorator, Component, ScrollView, instantiate, Node, UITransform } from "cc"; const { ccclass, property } = _decorator; @ccclass export default class DropDownController extends Component{ @property(Node) m_SelectItem:Node =null; @property(ScrollView) m_OpenList:ScrollView=null; @property(Node) m_RendererItem:Node=null; m_ItemRendererFuntion:Function; m_ItemClick:Function; m_SelectItemFuntion:Function; _ItemCount:number=0; isautoSetwith:boolean=false; isSelectItemclick:boolean=false; m_Starindex:number=0; private ChildItemList:Node[]=[]; get m_ItemCount():number{ return this._ItemCount; } set m_ItemCount(value:number){ this._ItemCount = value; this.SetOpenListItem(); } protected onLoad(): void { if(this.isSelectItemclick){ CNodeUtils.addBtnComponent(this.m_SelectItem,this.OpenDropList,this); }else{ CNodeUtils.addBtnComponent(this.node,this.OpenDropList,this); } this.SetSelectItem(0); this.m_OpenList.node.active = false; if (this.isautoSetwith) { this.node.getChildByName("bg").active = this.m_OpenList.node.active; } } SetSelectItem(Index:number){ this.m_SelectItemFuntion && this.m_SelectItemFuntion(Index,this.m_SelectItem); } OpenDropList(){ this.m_OpenList.node.active = !this.m_OpenList.node.active; if (this.isautoSetwith) { this.node.getChildByName("bg").active = this.m_OpenList.node.active; } if(this.m_OpenList.node.active){ this.SetOpenListItem(); } } SetOpenListItem(){ for(let i=0; i< this._ItemCount; i++){ if(i >= this.ChildItemList.length){ let Item =instantiate(this.m_RendererItem); this.ChildItemList.push(Item); this.m_OpenList.content.addChild(Item); this.m_ItemClick && CNodeUtils.addBtnComponent(Item,this.m_ItemClick.bind(this,i,Item)) } this.ChildItemList[i].active = true; this.m_ItemRendererFuntion && this.m_ItemRendererFuntion(i,this.ChildItemList[i]); } let TempStarIndex = this._ItemCount; for(;TempStarIndex < this.ChildItemList.length; TempStarIndex++ ){ if(this.ChildItemList[TempStarIndex].active){ this.ChildItemList[TempStarIndex].active=false; }else{ break; } } if(this.isautoSetwith){ this.m_OpenList.node.getComponent(UITransform).width = this.m_OpenList.content.getComponent(UITransform).width+7; this.node.getChildByName("bg").getComponent(UITransform).width = this.m_OpenList.content.getComponent(UITransform).width+94; } } }