项目地址:https://gitee.com/kexilu/ScrollView.git
这个组件可以单行的横向和纵向,也可以多行多列的横向或纵向,类似上图。
我知道论坛有很多大佬有这个组件的优化,奈何本人实力太弱,看不懂各位大佬的代码逻辑,只能凭自己的粗略手段完成了这个组件的优化,肯定会有很多我没发现的问题,欢迎各位大佬提出宝贵优化意见
项目地址:https://gitee.com/kexilu/ScrollView.git
这个组件可以单行的横向和纵向,也可以多行多列的横向或纵向,类似上图。
我知道论坛有很多大佬有这个组件的优化,奈何本人实力太弱,看不懂各位大佬的代码逻辑,只能凭自己的粗略手段完成了这个组件的优化,肯定会有很多我没发现的问题,欢迎各位大佬提出宝贵优化意见
大佬牛皮
大佬写个使用说明
哦,好的好的,一会补上说明
ScrollViewManager说明文档
从git上拉下来的文件里一共有三个脚本,一个场景,如图所示
ItemPanelController.ts
这个脚本是所有子面板的父类控制脚本,根据不同的ScrollView肯定会有不同的子面板,所以所有的子面板的控制脚本可以继承这个脚本,方便ScrollViewManager.ts中更新面板信息的方法有效进行【当然你可以自己定制自己的控制脚本,随后会说如何更改】。
Test.ts
是挂在场景demo里的实例,如果有本章说明不清楚不明白的,可以看实例或者直接问我。
ScrollViewManager.ts
组件核心,挂载在官方Scroll View组件下
可调用方法:
ResetPanel(),可以将面板初始化至开始,数值不会更新。如果没有数据更新,可以调用这个方法。
SetScroll(item:any[],controller),设置子面板属性的方法,
@item:子面板属性数组,也相当于该组件要初始化面板的重要数据,也是中途刷新子面板的关键数据。
@controller:子面板控制方法
OnStartPanel(),开始脚本,在SetScroll()方法后执行。会根据SetScroll()方法传入的值,初始化ScrollView面板属性。
OnResetPanel(),可以将面板初始化至开始,数值会发生改变。在SetScroll()方法后执行。会根据SetScroll()方法传入的值,初始化ScrollView面板属性。
说明文档已经补充,请更新一下代码,有部分逻辑上的修改,说明文档也放进了git中,更新后就有了
很棒,建议再加个跳转到目标index的接口:
随手写了一下,
先算出跳转targetIndex的Offset:
// 目标item的index
GetTargetIndexOffset: function(targetIndex){
var index = targetIndex;
var x = (this.ViewType == 1 && this.CountentType == 1) ? this.PanelIndexPositionList[index][0] : (this.ViewType == 1 && this.CountentType == 2) ? -this.PanelIndexPositionList[index][0] : this.PanelIndexPositionList[index][0];
return x - this.__Scrollview.node.width/2;
},
在offset改变的情况下,重设一下位置和更新item:
//
ToIndex: function(targetIndex) {
var child = this.CountentPanel.children;
// 显示问题
for (var i = 0; i < child.length; i++) {
var index = targetIndex + i;
var _panel = child[i];
_panel.x = (this.ViewType == 1 && this.CountentType == 1) ? this.PanelIndexPositionList[index][0] : (this.ViewType == 1 && this.CountentType == 2) ? -this.PanelIndexPositionList[index][0] : this.PanelIndexPositionList[index][0];
_panel.y = (this.ViewType == 2 && this.CountentType == 1) ? -this.PanelIndexPositionList[index][1] : (this.ViewType == 2 && this.CountentType == 2) ? this.PanelIndexPositionList[index][1] : this.PanelIndexPositionList[index][1];
this.ItemAssignment(_panel, this.ItemMsgList[index]);
}
},
哇,好棒好棒,最近有项目,一直没有更新这个东西,这个功能一直没做呢QWQ
我会找时间进行验证所有功能可行性后,将代码署名更新
兄弟,你这个不行啊,光吧panel面板的位置固定了,没有吧countent位置移过去啊,我已经改好了,回头测试完提交
有更新么?
我瞅瞅,最近没咋用这个组件
listView论坛好多版本了,各有千秋也各有bug,这个基础组件几乎是每个项目必备,不知道为何官方不能提供一个稳定可靠的呢?
官方其实提供的版本是个很通用基础的组件了,毕竟每个项目的侧重点不同,所以根据项目的侧重点可以进行适当的优化也是很不错的
giegie 你马云上面的 没法跑起来呢
哦,稍等,更新组件的时候估计漏了点东西