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. 从自定义 ...
随机推荐
- android矩阵具体解释
Matrix.中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成.是一个3*3的矩阵. 最好记住.例如以 ...
- jQuery Form插件详解
<script src="js/jquery.form.js" type="text/javascript"></script> Jqu ...
- php 添加数据库的几种方法
最简单的 <?php $con = mysql_connect("localhost","root","root"); if (!$c ...
- Spring Boot 官方文档学习(二)特点
一.SpringApplication banner,就是启动时输出的信息,可以在classpath下添加 banner.txt,或者设置 banner.location 来指向特定的文件.(默认编码 ...
- 同一页面中引入多个JS库产生的冲突解决方案(转)
发生JS库冲突的主要原因:与jQuery库一样,许多JS库都使用‘$’符号作为其代号.因此在一个页面中引入多个JS库,并且使用‘$’作为代号时,程序不能识别其代表哪个库(这个是我自己的解释,但更深的原 ...
- TextView不用获取焦点也能实现跑马灯
1.写一个类继承TextView package com.example.tt; import android.content.Context; import android.graphics.Rec ...
- python3.4连接mysql
参考:http://www.blogjava.net/huyi2006/articles/247966.html 开发环境:win7_x64 + python3.4.3 + mysql5.6.23 准 ...
- $.ajax的一般用法
$.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() 一.$.ajax的一般格式 $.ajax({ type: 'POST', url: url , ...
- JavaSE(八)之Map总结
上一篇是总结了Collection接口的各种实现类,这一篇我将分享的是Map的总结,希望大家点评! 一.Map接口 1.1.为什么Collection不能满足集合的所有功能? Collection接口 ...
- jQuery-替换和删除元素
1.replaceWith方法 用提供的内容替换集合中所有匹配的元素并且返回被替换元素的集合 参数类型说明: 1)普通字符串(可包含各种html标签) 2)jQuery对象 ①使用$函数创建的新元素( ...