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. 从自定义 ...
随机推荐
- mysql数据库对时间进行默认的设置
//----------------------------------------------------------sql语句----------------------------------- ...
- 科普Spark,Spark核心是什么,如何使用Spark(1)
科普Spark,Spark是什么,如何使用Spark(1)转自:http://www.aboutyun.com/thread-6849-1-1.html 阅读本文章可以带着下面问题:1.Spark基于 ...
- 关于Unity中的定时器和委托
一.Invoke定时器 有3种定时器,这里我们讲Invoke 1.创建一个Canvas 2.对Canvas进行初始化 3.创建一个Image的UI节点作为Canvas的子节点,名字叫bg,拖进背景图片 ...
- Incentivizing exploration in reinforcement learning with deep predictive models
Stadie, Bradly C., Sergey Levine, and Pieter Abbeel. "Incentivizing exploration in reinforcemen ...
- ti的硬件时钟和系统时钟同步
1.hwclock -w软到硬 hwclock -s 硬到软 2. 通过ntp网络时钟控制同步 3.etc下的localtime文件和GMT-8
- Java 阻塞
对于用ServerSocket 及 Socket 编写的服务器程序和客户程序, 他们在运行过程中常常会阻塞. 例如, 当一个线程执行 ServerSocket 的accept() 方法时, 假如没有客 ...
- php多语言截取字符串函数
<?php header("Content-Type:text/html;charset=utf-8"); function msubstr($str, $start = 0 ...
- apache Storm之一-入门学习
准备工作 这个教程使用storm-starter项目里面的例子.我推荐你们下载这个项目的代码并且跟着教程一起做.先读一下:配置storm开发环境和新建一个strom项目这两篇文章把你的机器设置好. 一 ...
- bootstrap中如何使input中的小图标获得点击事件
bootstrap中,放入input中的小图标是不能点击的. 在表单中经常遇见密码旁边的眼睛图标点击后,可使密码可见. 要使小图标获得点击事件,可在小图标上覆盖一个跟小图标一样大的透明层,然后给透明层 ...
- MathType如何编辑手写体l
MathType在编辑公式不仅方便而且规范,并且能够根据自己的需要选择不同的字体进行使用,可以是正体也可以是斜体,可以是新罗马体,也可以是花体,这些用word公式编辑器MathType都是可以的.还有 ...