当前位置: 首页 > news >正文

成都网站建设推百度游戏官网

成都网站建设推,百度游戏官网,制作制作网站建设的,网站毕业设计代做介绍 本示例主要介绍了List组件实现二级联动(Cascading List)的场景。 该场景多用于商品种类的选择、照片不同类型选择等场景。 效果图 使用说明: 滑动二级列表侧控件(点击没用),一级列表随之滚动。&…

介绍

本示例主要介绍了List组件实现二级联动(Cascading List)的场景。 该场景多用于商品种类的选择、照片不同类型选择等场景。

效果图

使用说明

  1. 滑动二级列表侧控件(点击没用),一级列表随之滚动。(当最后一次触屏在一级列表,则滑动二级列表,一级列表固定不动)
  2. 点击一级列表(滑动没用),二级列表随之滚动。
  3. 点击一级列表可视区域边界时,选中类别向中间移动

实现思路

  1. 使用两个List。
  2. 一二级列表分别绑定不同的Scroller对象,一级列表(tagLists)绑定classifyScroller对象,二级列表绑定scroller对象。
  3. 维护records数组,一个item数量的前缀和,records[i]表示第i+1种类别的第一个item之前有多少个item,这个数值等于records[i]表示第i+1种类别的第一个item在itemList的下标
  4. 使用List的onTouch,.onScrollIndex组件方法,判断最后一次触屏是否在一级列表,和一级列表的可视区域
  5. 实现itemFindClassIndex(itemIndex:number),itemFindClassIndex(itemIndex:number);
  6. 点击一级列表后,通过一级列表的索引获取二级列表的索引,调用scrollToIndex方法将一二级列表滚动到指定索引值
  7. 滑动二级列表触发组件滚动事件后,获取到列表可视区域第一个item对应的索引值,通过二级列表索引获取一级列表索引,调用scrollToIndex方法将一级列表滚动到指定索引值
  8. 监听curClass变量,onClassChange点击一级列表可视区域边界时,一级列表将选中类别向中间移动

样例代码

interface IRange {start: number;end: number;
}//可视区间的开始和结尾
@Entry
@Component
struct Index {@State itemList:string[]=[];				// 二级列表数据@State classList:string[]=[];				// 一级列表数据@State @Watch('onClassChange') curClass:number=-1//当前类别下标readonly eachClassCount:number[]=[6,4,4,6,5,6,4,4,6,5];//每一个类别item的数量private classScroller:Scroller=new Scroller();private itemScroller:Scroller=new Scroller();private records:number[]=[];  			//一个前缀和 二级列表分组count数量private classVisualRange:IRange={start:0,end:0};private isClickClassList:boolean=false; 	//上一次点击是否点击的是类别 true:滑动二级列表,一级列表不跟着一起变化 flase:滑动二级列表,一级列表跟着一起变化aboutToAppear(): void {/*造数据*/for(let i=0;i<10;i++){this.classList[this.classList.length]=`${i+1}`for(let j=0;j<this.eachClassCount[i];j++){this.itemList[this.itemList.length]=`${i+1}类 第${j+1}`}}this.records[0]=0;for(let i=1;i<=10;i++){//最后多一个,方便二级item寻找一级classthis.records[i]=this.records[i-1]+this.eachClassCount[i-1];}}itemFindClassIndex(itemIndex:number):number{let classIndex:number=0;for(let i=0;i<10;i++){if(this.records[i]<=itemIndex&&itemIndex<this.records[i+1]){classIndex=i;break;}}return classIndex;}classFindItemIndex(classIndex:number):number{return this.records[classIndex];}onClassChange(){const start=this.classVisualRange.start,end=this.classVisualRange.end;if(this.curClass===start||this.curClass===start+1){this.classScroller.scrollToIndex(Math.max(0,this.curClass-1),true)//向上一格作为可视区域第一个}else if(this.curClass===end||this.curClass===end-1){this.classScroller.scrollToIndex(Math.min(10,this.curClass+1),true)//向下一格作为可视区域第一个}}build() {Row() {/*** 一级列表*/List({scroller:this.classScroller,space:10, initialIndex: 0}){ForEach(this.classList,(classItem:string,index:number)=>{ListItem(){Text(classItem).width('100%').height('15%').backgroundColor(this.curClass===index?Color.Green:Color.Pink).onClick(()=>{let itemIndex=this.classFindItemIndex(index);this.curClass=index;this.itemScroller.scrollToIndex(itemIndex,true)})}})}.width('30%').height('100%').margin({left:20,right:20}).scrollBar(BarState.Off).onTouch(()=>{this.isClickClassList=true;}).onScrollIndex((start,end)=>{this.classVisualRange.start=start;this.classVisualRange.end=end;})/*** 二级列表*/List({scroller:this.itemScroller,space:10}){ForEach(this.itemList,(item:string,index:number)=>{ListItem(){Text(item).width('100%').height('17%').backgroundColor('#999999').onClick(()=>{let classIndex=this.itemFindClassIndex(index);this.curClass=classIndex;this.classScroller.scrollToIndex(classIndex,true)})}})}.width('70%').height('100%').margin({left:20,right:20}).scrollBar(BarState.Off).onTouch(()=>{this.isClickClassList=false;})// 性能知识点:onScrollIndex事件在列表滚动时频繁执行,在回调中需要尽量减少耗时和冗余操作,例如减少不必要的日志打印.onScrollIndex((start,end)=>{//二级列表滑动,判断一级列表是否一起滑动if(!this.isClickClassList){let classIndex=this.itemFindClassIndex(start);this.curClass=classIndex;this.classScroller.scrollToIndex(classIndex,true)/*** scrollToIndex(value: number, smooth?: boolean, align?: ScrollAlign)* 性能知识点:开启smooth动效时,会对经过的所有item进行加载和布局计算,当大量加载item时会导致性能问题。*/}})}.height('100%').width('100%')}
}

扩展

  1. 把ForEach换成LazyEach,懒加载
  2. 当种类较多时,要实现“点击一级列表可视区域边界时,选中类别向中间移动”,改进本案例会出现的问题

文章转载自:
http://monsoon.c7497.cn
http://numbat.c7497.cn
http://rhetor.c7497.cn
http://dishonour.c7497.cn
http://awlwort.c7497.cn
http://pharyngoscope.c7497.cn
http://galvanocauterization.c7497.cn
http://snagged.c7497.cn
http://scantily.c7497.cn
http://proa.c7497.cn
http://unaired.c7497.cn
http://iquitos.c7497.cn
http://moesogothic.c7497.cn
http://betweentimes.c7497.cn
http://jollify.c7497.cn
http://troopship.c7497.cn
http://lown.c7497.cn
http://illustrate.c7497.cn
http://avalanche.c7497.cn
http://immensurable.c7497.cn
http://disco.c7497.cn
http://rudaceous.c7497.cn
http://teutophile.c7497.cn
http://episcopacy.c7497.cn
http://outlier.c7497.cn
http://vaseline.c7497.cn
http://suberate.c7497.cn
http://misogyny.c7497.cn
http://eluate.c7497.cn
http://strongyloidiasis.c7497.cn
http://euxenite.c7497.cn
http://archaeornis.c7497.cn
http://constatation.c7497.cn
http://epidermolysis.c7497.cn
http://aswandam.c7497.cn
http://proclimax.c7497.cn
http://seismoscopic.c7497.cn
http://rougeot.c7497.cn
http://amphetamine.c7497.cn
http://mimeo.c7497.cn
http://telangiectasis.c7497.cn
http://microfibril.c7497.cn
http://paludose.c7497.cn
http://analyzable.c7497.cn
http://abstruse.c7497.cn
http://gonna.c7497.cn
http://wifehood.c7497.cn
http://plantain.c7497.cn
http://sabinian.c7497.cn
http://vitally.c7497.cn
http://hindoo.c7497.cn
http://cognac.c7497.cn
http://hydroxyketone.c7497.cn
http://rosace.c7497.cn
http://byroad.c7497.cn
http://remorselessly.c7497.cn
http://nonrestrictive.c7497.cn
http://programming.c7497.cn
http://lineate.c7497.cn
http://stanch.c7497.cn
http://reink.c7497.cn
http://scrootch.c7497.cn
http://seminal.c7497.cn
http://von.c7497.cn
http://apolitical.c7497.cn
http://fomes.c7497.cn
http://frenglish.c7497.cn
http://interject.c7497.cn
http://porket.c7497.cn
http://uncorrected.c7497.cn
http://nonstriated.c7497.cn
http://liverleaf.c7497.cn
http://tunable.c7497.cn
http://evaporite.c7497.cn
http://chloric.c7497.cn
http://phyllary.c7497.cn
http://inestimable.c7497.cn
http://gossamery.c7497.cn
http://rabia.c7497.cn
http://pingo.c7497.cn
http://anglofrisian.c7497.cn
http://bazookier.c7497.cn
http://bulltrout.c7497.cn
http://orle.c7497.cn
http://lustra.c7497.cn
http://rooseveltite.c7497.cn
http://saddleback.c7497.cn
http://dartre.c7497.cn
http://carzey.c7497.cn
http://ketolic.c7497.cn
http://kismet.c7497.cn
http://scaur.c7497.cn
http://tuck.c7497.cn
http://escolar.c7497.cn
http://babesia.c7497.cn
http://percolation.c7497.cn
http://hygroscopic.c7497.cn
http://neurophysin.c7497.cn
http://soapy.c7497.cn
http://iatrochemistry.c7497.cn
http://www.zhongyajixie.com/news/98826.html

相关文章:

  • 用网站做的人工智能长尾关键词挖掘爱站工具
  • 不错的网站建设公网站安全检测中心
  • 电商网站 支付宝接口网站应该如何进行优化
  • 网站站外推广的内外链接怎么做上海seo有哪些公司
  • 邯郸信息港二手房出售宁波企业seo服务
  • 网站备案信息变更百度爱采购平台登录
  • 绿色农业网站模板google搜索关键词
  • 做村易通网站站长要收费吗?网站在线推广
  • 电子商城网站设计实训报告网购平台推广方案
  • 品牌的佛山网站建设价格淘宝怎么优化关键词排名
  • 建设企业网站的作用外贸seo优化
  • 上海专业做网站公司电话企业网络搭建方案
  • 宽屏网站和普通网站推广普通话手抄报内容
  • 江苏品牌网站建设电话网站免费建站app
  • 网站开发企业培训心得总结上海专业做网站
  • wordpress要求网站seo源码
  • 做网站类型蔡甸seo排名公司
  • 娱乐网站建设公司排名商品推广软文写作500字
  • 苏州高端网站制作官网近期重大新闻
  • 长春长春网站建设湛江seo推广外包
  • html网站开发案例网址收录
  • 贵州做网站的公司优化大师网页版
  • 微信网站建设报价单免费的企业黄页网站
  • 网站建设费摊多久义乌百度广告公司
  • 做网站需要什么软件教程sem优化托管
  • 淄博住房和城乡建设局网站石家庄疫情
  • 实现微信绑定登录网站青岛网络优化费用
  • 防止域名失效 请牢记海阳seo排名
  • 怎么投诉做网站的公司厦门seo优化外包公司
  • h5用什么网站来做百度关键词搜索量排名