一 自定义组件如下

/**
* 文 件 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的更多相关文章

  1. Omi-touch实战 移动端图片轮播组件的封装

    pc端的轮播,移动端的轮播都很常见.一年前,我还为手机端没有左滑,右滑事件从而封装了一个swipe库,可以自定义超过多少滑动时间就不触发,也可以设置滑动多少距离才触发,这一个功能的代码就达到400多行 ...

  2. 一分钟搞定AlloyTouch图片轮播组件

    轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹. 除了一般的竖向滚动,AlloyTouch也可以支持横向滚动,甚至 ...

  3. swift 自定义图片轮播视图

    Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...

  4. Angular2组件与指令的小实践——实现一个图片轮播组件

    如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...

  5. 如何将angular-ui的图片轮播组件封装成一个指令

    在项目开发中我们经常会遇到图片轮播的功能点: 如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失. 接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于 ...

  6. Vue学习—Vue写一个图片轮播组件

    1.先看效果: 熟悉的图片轮播,只要是个网站,百分之90以上会有个图片轮播.我认为使用图片轮播. 第一可以给人以一种美观的感受,而不会显得网站那么呆板, 第二可以增加显示内容,同样的区域可以显示更多内 ...

  7. 如何将angular-ui-bootstrap的图片轮播组件封装成一个指令

    在项目开发中我们经常会遇到图片轮播的功能点: 如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失. 接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于 ...

  8. Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView

    最近一段日子忙的焦头烂额,代码重构,新项目编码,导致jsoup开发网站客户端也没时间继续下去,只能利用晚上时间去研究了.今天实现美食网首页图片轮播效果,网站效果图跟Android客户端实现如图: 从浏 ...

  9. EUI Scroller实现图片轮播 组件 ItemScroller

    一 自定义组件如下 /** * 文 件 名:ItemScroll.ts * 功 能: 滚动组件 * 内 容: 自定义组件,支持多张图片水平(垂直)切换滚动 * * Example: * 1. 从自定义 ...

随机推荐

  1. expect模块的使用,主要没装包折腾一晚上

    第一步首先下载expect 模块,yum list |grep expect ,安装下面的模块. expect.x86_64                               5.44.1. ...

  2. C# 关于JArray和JObject封装JSON对象

    直入主题,不废话... 1.JObject:基本的json对象 /// <summary> /// Gets the j object. /// </summary> /// ...

  3. Sphinx速成指南

    目录 1. Sphinx简介 1.1. 什么是全文检索 1.2. 介绍 1.3. Sphinx的特性 2. Sphinx安装(For MySQL) 2.1. Windows下安装 2.2. Linux ...

  4. svn命令使用常见问题

    1.如何添加文件 ? svn add filename svn ci -m "add file" 2. svn ci 出现冲突 经常多人开发时难免多个人修改同一个文件导致冲突发送, ...

  5. 数据库 Oracle监听实例详解

    Oracle实例别名 IMCDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = )) (CONNECT_D ...

  6. 关于用Cocos2d-x.3.10运行别人游戏项目的步骤

    1.首先打开Cocos那个一体化软件. 2.创建工程,取名字,选择路径. 3.用VS2013打开新建的项目. 4.打开cocosdata(我自己放游戏项目的文件目录)的相应项目(自己刚创建的). 5. ...

  7. 【转】Microsoft .Net Remoting之Marshal、Disconnect与生命周期以及跟踪服务

    Marshal.Disconnect与生命周期以及跟踪服务 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...

  8. MongoDB C Driver Building on Windows

    一.编译mongodb c driver: 需要先安装OpenSSL:(参见:http://bbs.aircheng.com/read-2222-1) 步骤:(MongoDB步) 1.下载Active ...

  9. 一、Open CV3.0.0 与 VS2012配置

    原创:博乐Bar,转载请注明出处. 第一步,准备软件及开发环境 1.OpenCV 3.0.0 下载地址:http://www.opencv.org.cn/index.php/Download ,下载最 ...

  10. 基于swoole扩展实现真正的PHP数据库连接池

    转自:  http://rango.swoole.com/archives/265 PHP的数据库连接池一直以来都是一个难题,很多从PHP语言转向Java的项目,大多数原因都是因为Java有更好的连接 ...