Egret社区

求一个循环滚动条

2019-10-20 18:05
2578
大佬们
求个循环滚动条,就是内容固定例如1、2、3、4、5,但是可以一直滚动,然后内容循环走的滚动条
分享到 :
0 人收藏

8 个回复

正序浏览
a365344743s  登堂入室 | 2019-10-22 13:40:05

点评

感谢回答,不会的朋友们可以参考这个去做效果还是可以的,但是源代码有点bug,修改下就可以使用啦。感谢感谢  发表于 2019-10-22 18:47
a365344743s  登堂入室 | 2019-10-24 09:27:22
不会飞的猪 发表于 2019-10-23 11:18
我发这里吧,第一个bug
垂直滚动的问题

已修复
不会飞的猪  登堂入室 | 2019-10-23 11:18:38
a365344743s 发表于 2019-10-23 09:04
有什么bug我去改一下,能提交一个pull request吗,或者贴代码也可以

我发这里吧,第一个bug
垂直滚动的问题
  1. CycleScroller.prototype['verticalUpdateHandler'] = function(scrollPos: number): void {
  2.         let params = this._params;
  3.         const viewport = this.$Scroller[ScrollerPullRefresh.Keys.viewport] as eui.Group;
  4.         let num = scrollPos > this._posInit ? Math.floor((scrollPos - this._posInit) / (params.itemSize.height + params.gap)) : Math.ceil((scrollPos - this._posInit) / (params.itemSize.height + params.gap));
  5.         let numAbs = Math.abs(num);
  6.         if (numAbs > 0) {
  7.                 let touchScrollV = this.$Scroller[ScrollerPullRefresh.Keys.touchScrollV];
  8.                 if (scrollPos > this._posInit) {        //上移
  9.                         for(let i = 0;i < numAbs;i++) {
  10.                                 this.shiftItem();
  11.                                 this.pushItem((viewport.getElementAt(viewport.numElements - 1) as any as ICycleScrollerItem).sourceIndex + 1);
  12.                         }
  13.                 } else {
  14.                         for(let i = 0;i < numAbs;i++) {        //下移
  15.                                 this.popItem();
  16.                                 this.unshiftItem((viewport.getElementAt(0) as any as ICycleScrollerItem).sourceIndex - 1);
  17.                         }
  18.                 }
  19.                 let delta = num * (params.itemSize.height + params.gap);
  20.                 scrollPos -= delta;
  21.                 touchScrollV.animation.currentValue = scrollPos;
  22.                 touchScrollV.currentScrollPos = scrollPos;
  23.                 viewport.scrollV = scrollPos;
  24.                 touchScrollV.animation.from -= delta;
  25.                 touchScrollV.animation.to -= delta;
  26.         } else {
  27.                 if (viewport) {
  28.                         [color=Red]viewport.scrollV = scrollPos;[/color]
  29.                 }
  30.                 this.dispatchEventWith(egret.Event.CHANGE);
  31.         }
  32. }
复制代码


使用方法我也写下:
  1.    let scro = new CycleScroller();
  2.         scro.viewport = new eui.Group();

  3.        // mlist.itemRenderer =tempitem ;
  4.         scro.height = 200;
  5.         scro.scrollPolicyH = eui.ScrollPolicy.OFF;
  6.         scro.width = 377;
  7.         scro.params={
  8.             template:tempitem,
  9.             itemSize:{width:377,height:67},
  10.             gap:20,
  11.             source:["111","22222","33333333"],
  12.             direction:CycleScrollerDirection.VERTICAL,
  13.             autoScrollTime:0};

  14.         this.addChild(scro);
复制代码

还要写个继承eui.ItemRenderer 、ICycleScrollerItem的类
就大工告成啦。还是感谢你的分享啊。
a365344743s  登堂入室 | 2019-10-23 09:04:43
有什么bug我去改一下,能提交一个pull request吗,或者贴代码也可以
不会飞的猪  登堂入室 | 2019-10-22 15:37:30
本帖最后由 不会飞的猪 于 2019-10-22 16:56 编辑

非常感谢,我尝试下
不会飞的猪  登堂入室 | 2019-10-21 14:51:17
app小王子 发表于 2019-10-21 14:01
http://developer.egret.com/cn/github/egret-docs/extension/EUI/container/scroller/index.html
定时器循 ...

不是这样的,是需要手动滑动的,内容循环的,不是要这种。
我试了试当滑动到最下方的时候改变sc.viewport.scrollV这个值,但是效果总不是很好
现在好多手机上行都有类似功能例如选择年月日
app小王子  社区管理员 | 2019-10-21 14:01:21
http://developer.egret.com/cn/gi ... scroller/index.html
定时器循环控制 sc.viewport.scrollV 的值。试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部