记录一下自己做的PageView无限循环功能

2.4.3版本
大佬可以略过哈,小白可以参考一下

由于项目需求,需要弄一个界面拨动切换,于是在论坛找一下有没有什么例子!
网上大部分的实现逻辑是:
建立三个page:page_1、page_2、page_3;初始定位到page_2;
当滑动到page_1时,删除page_3,新建一页插入到最前面,然后定位到page_2;
当滑动到page_3时,删除page_1,新建一页插入到最后面,然后定位到page_2。

我按这个思路做的时候会发现有点问题
1.新插入的page不响应,且删除添加的时候会出现闪屏的问题

于是我自己改了一下思路
建立三个page:page_1、page_2、page_3;初始定位到page_2;
当滑动到page_1时,立即移动位置到page_2且刷新全部page全部内容;
当滑动到page_3时,同上

这样实现避免了删除插入出现的闪屏和新插入的page不响应问题

核心代码如下:(我为了滑动丝滑一点就创建五个page了哈!)
for (let index = 0; index < 5; index++) {
let obj = cc.instantiate(this.pageNode)

    obj.width = this.page.node.width

    this.page.insertPage(obj, index)

}

//计算中心位置

let list = this.page.getPages()

if (list.length > 0) {

    let width = list[0].width

    this._centerX = list.length / 2 * width

}

//中心index的数值

let pageIndex = Math.floor(list.length / 2)

//注册事件

this.page.node.on("scroll-ended", () => {

    // cc.log("测试滑动", this.page.getCurrentPageIndex())

    if (this.page.getCurrentPageIndex() <= pageIndex - 1) {

        this.page.content.setPosition(-this._centerX, 0)

        this.page.setCurrentPageIndex(pageIndex)

    } else if (this.page.getCurrentPageIndex() >= pageIndex + 1) {

        this.page.content.setPosition(-this._centerX, 0)

        this.page.setCurrentPageIndex(pageIndex)

    }

})

效果图如下
GIF 2021-10-21 21-18-41

5赞

做个广告
super-scrollview

  • 支持上拉加载、下拉刷新
  • 支持无限循环滚动
  • 分帧创建item
  • 循环分页 pageview
  • 嵌套分页 pageview
  • 支持表格布局Grid
  • 支持不定宽高缩放自适应,item在运行时可随意更改宽高和缩放
  • 支持滑动自动居中,居中锚点可自定义
    下载地址 super-scrollview | Cocos Store
2赞

大大,请问您的这个 super-scrollview 的版本和商店里面的
无限滚动列表
有什么新增的特征吗?
最近在store买的有点多,才发现好多买的重复了 :sweat_smile:

循环滚动只是个选项,支持单方向循环,双向循环,支持 单行单列 表格 分页 等布局

1赞

好的,感谢大大的回复

cocos3好像不能用