EUI Scroller实现自定义图片轮播 组件ScrollView
一 自定义组件如下
/**
* 文 件 ScrollView.ts
* 功 能: 滚动组件
* 内 容: 自定义组件,支持多张图片水平(垂直)切换滚动
*
* Example:
* 1. 从自定义组件中找到ScrollView,并拖动到exml上
* 2. 将需要显示对象(图片等)拖动到ScrollView的Group下
* 3. 设置Group的布局为垂直or水平
*/
class ScrollView extends eui.Scroller {
/**页面总数*/
public itemNum: number;
/**单页尺寸*/
public itemSize: number;
/**当前第几项 0表示第1项*/
public curItemCount: number = ;
/**滚动时间 从一页滑动到另一页的时间*/
public delayScroll: number = ;
/**是否是水平滚动*/
public isHScroller: Boolean;
/**触摸起始位置*/
private touchStartPos: number;
/**记录开始划动时间*/
private startTime:number;
/**翻页时间阈值,在阈值内完成划动,划动距离不需要大于屏幕1/3,也会向手指划动方向翻页 */
private immediatelyTime:number = ;
//是否第一次移动,用于记录移动开始时间
private bFirstMove:boolean = true; /**
* 初始化
*/
public init(){
//立即验证,获取width、height
this.validateNow(); //判断是垂直还是水平滚动
var widthDist: number = this.viewport.contentWidth - this.viewport.width;
if(widthDist > ) {
this.isHScroller = true;
this.itemSize = this.viewport.width;
this.itemNum = this.viewport.contentWidth / this.viewport.width;
} else {
this.isHScroller = false;
this.itemSize = this.viewport.height;
this.itemNum = this.viewport.contentHeight / this.viewport.height;
} //滚动容器设置
this.throwSpeed = ;
this.bounces = true;
this.addEventListener(eui.UIEvent.CHANGE_START,this.onChangeStartHandler,this);
this.addEventListener(eui.UIEvent.CHANGE, this.onChangeHanlder, this);
this.addEventListener(eui.UIEvent.CHANGE_END,this.onChangeEndHandler,this);
} /**拖动开始*/
private onChangeStartHandler() {
this.bFirstMove = true;
} //第一次移动开始,记录开始时间
private onChangeHanlder(e:eui.UIEvent){
if(this.bFirstMove){
this.bFirstMove = false;
this.startTime = egret.getTimer();
if(this.isHScroller) {
this.touchStartPos = this.viewport.scrollH;
} else {
this.touchStartPos = this.viewport.scrollV;
}
egret.Tween.removeTweens(this.viewport);
}
} /**拖动结束*/
private onChangeEndHandler(): void {
if(this.touchStartPos == -){ //防点击触发changeend,因为如果不禁止,单纯点击touch_tap也能触发change_end事件,也会翻页
return;
}
var dict: number; //手指划动距离
if(this.isHScroller) {
dict = this.viewport.scrollH - this.touchStartPos;
} else {
dict = this.viewport.scrollV - this.touchStartPos;
} //短时间内划动,划动距离小于1/3屏幕也能翻页
if(egret.getTimer() - this.startTime < this.immediatelyTime){
if(dict > ) {
this.scrollToNext();
} else if(dict < ) {
this.scrollToLast();
}
//计算划动距离大过1/3屏幕,才会翻页,否会回弹到当前页面
}else{
if(dict > this.viewport.width/) {
this.scrollToNext();
} else if(dict < -this.viewport.width/) {
this.scrollToLast();
}else{
this.scrollToItem(this.curItemCount);
}
}
//防touch_tap触发change_end
this.touchStartPos = -;
} /**滑动到下一项*/
public scrollToNext(): void {
var item: number = this.curItemCount;
if(item < this.itemNum - ) {
item++;
}
this.scrollToItem(item);
} /**滑动到上一项*/
public scrollToLast(): void {
var item: number = this.curItemCount;
if(item > ) {
item--;
}
this.scrollToItem(item);
}
/**
* 滚动到指定项 (0是第一项)
* @item 指定项
*/
public scrollToItem(item: number): void {
if(item >= && item < this.itemNum) {
this.curItemCount = item;
egret.Tween.removeTweens(this.viewport);
if(this.isHScroller) {
egret.Tween.get(this.viewport).to({ scrollH: item * this.itemSize,ease: egret.Ease.quadOut },this.delayScroll);
} else {
egret.Tween.get(this.viewport).to({ scrollV: item * this.itemSize,ease: egret.Ease.quadOut },this.delayScroll);
}
}
} /**启用组件触摸 */
public enableTouch(){
this.touchEnabled = true;
this.touchChildren = true;
} /**禁用组件触摸 */
public disableTouch(){
this.touchChildren = false;
this.touchEnabled = false;
} /**销毁*/
public destroy() { }
}
二 exml中使用
将Image拖动到Group下,高宽和Group一致。
Group布局设置为垂直或水平,设置间隙为0
在ts里获取这个组件,并init初始化即可

三 实际效果

EUI Scroller实现自定义图片轮播 组件ScrollView的更多相关文章
- Omi-touch实战 移动端图片轮播组件的封装
pc端的轮播,移动端的轮播都很常见.一年前,我还为手机端没有左滑,右滑事件从而封装了一个swipe库,可以自定义超过多少滑动时间就不触发,也可以设置滑动多少距离才触发,这一个功能的代码就达到400多行 ...
- 一分钟搞定AlloyTouch图片轮播组件
轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹. 除了一般的竖向滚动,AlloyTouch也可以支持横向滚动,甚至 ...
- swift 自定义图片轮播视图
Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...
- Angular2组件与指令的小实践——实现一个图片轮播组件
如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...
- 如何将angular-ui的图片轮播组件封装成一个指令
在项目开发中我们经常会遇到图片轮播的功能点: 如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失. 接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于 ...
- Vue学习—Vue写一个图片轮播组件
1.先看效果: 熟悉的图片轮播,只要是个网站,百分之90以上会有个图片轮播.我认为使用图片轮播. 第一可以给人以一种美观的感受,而不会显得网站那么呆板, 第二可以增加显示内容,同样的区域可以显示更多内 ...
- 如何将angular-ui-bootstrap的图片轮播组件封装成一个指令
在项目开发中我们经常会遇到图片轮播的功能点: 如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失. 接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于 ...
- Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView
最近一段日子忙的焦头烂额,代码重构,新项目编码,导致jsoup开发网站客户端也没时间继续下去,只能利用晚上时间去研究了.今天实现美食网首页图片轮播效果,网站效果图跟Android客户端实现如图: 从浏 ...
- EUI Scroller实现图片轮播 组件 ItemScroller
一 自定义组件如下 /** * 文 件 名:ItemScroll.ts * 功 能: 滚动组件 * 内 容: 自定义组件,支持多张图片水平(垂直)切换滚动 * * Example: * 1. 从自定义 ...
随机推荐
- MapReduce 学习(一)
首先我们先来欣赏一下MapReduce的执行过程吧,如下图,自己看,不解释了. Map 和 Reduce 的处理都是基于Key/Value来进行的,在Map中对文件的每一行进行处理,有两个输入参数,K ...
- redis调优
1.先把持久化数据备份一份,然后使用rdb分析工具分析一下大的键值2.然后DBA删除一部分不用的3.然后再配置最大内存 千万不要没清理数据就直接把内存限制较小 那样会触发redis对内存达到限制的处理 ...
- 15 +免费及收费的jQuery滚动插件
免费的 jQuery Scrolling 插件 Tiny Scrollbar SUPERSCROLLORAMA jScrollPane Curtain.js Plugin JQuery : Scrol ...
- 消息中间件系列之Java API操作ActiveMQ
一.依赖 <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activem ...
- Python 变量类型和运算符
-*- coding:utf-8 -*- ''' if语法 if conditon: [tab键] command [tab键] command ... else: [tab键] command [t ...
- 逻辑斯特回归(logistic regression)的迭代变权最小平方差算法(IRLS)
参考资料:http://blog.csdn.net/xuanyuansen/article/details/41050507 习题: 数据及代码: https://pan.baidu.com/s/1 ...
- SSH远程登录其他机器
常用格式:ssh [-l login_name] [-p port] [user@]hostname更详细的可以用ssh -h查看. 不指定用户: ssh 192.168.0.11 指定用户: ssh ...
- Oracle数据库表空间与数据文件的关系描述正确的是( )
Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...
- linux -- ubuntu 安装apache后,修改默认路径
默认由apt方式安装的Apache,指定网页主目录位于:/var/www 而系统/var所分到的空间太少,所以要换路径 1.修改默认网站目录 ubuntu8.10下修改apache2的默认文档目录 默 ...
- 支付宝 报错 rsa_private read error : private key is NULL解决方法
原因: 真机调试IOS支付宝功能GDB出现 rsa_private read error : private key is NULL提示 调试iOS 支付宝SDK的时候,执行demo.把 Partn ...