• 环形组件


    namespace byh {
    /**
    * 环形组件
    */
    export class ComRingScroller extends egret.EventDispatcher {

    public static create(itemArr: any[], offX: number = 0): ComRingScroller {
    let ring = new ComRingScroller();
    ring.init(itemArr, offX);
    return ring;
    }

    private items: ComRingVo[];
    public vo: ComRingVo;
    private startX: number;
    private totalOffX: number;
    private currOffX: number;
    private isTween: boolean;

    public init(itemArr: egret.DisplayObject[], offX: number = 0) {
    let s = this;
    s.items = [];
    for (let i: number = 0; i < itemArr.length; i++) {
    let item = itemArr[i];
    let vo = new ComRingVo;
    vo.parse(item);
    s.items.push(vo);
    if (!s.vo) {
    s.vo = vo;
    }
    }

    s.totalOffX = offX ? offX : s.vo.item.width / 2;

    for (let i: number = 0; i < s.items.length; i++) {
    let vo = s.items[i];
    vo.prevVo = i - 1 >= 0 ? s.items[i - 1] : s.items[s.items.length - 1];
    vo.nextVo = i + 1 <= s.items.length - 1 ? s.items[i + 1] : s.items[0];
    }

    s.addEvent();
    }

    public addEvent(): void {
    let s = this;
    if (s.vo) {
    s.vo.item.parent.on(egret.TouchEvent.TOUCH_BEGIN, s.onTouchBegin, s);
    }
    }

    public removeEvent(): void {
    let s = this;
    if (s.vo) {
    s.vo.item.parent.off(egret.TouchEvent.TOUCH_BEGIN, s.onTouchBegin, s);
    }
    }

    private onTouchBegin(e: egret.TouchEvent): void {
    let s = this;
    s.startX = e.stageX;
    s.vo.item.parent.on(egret.TouchEvent.TOUCH_MOVE, s.onTouchMove, s);
    s.vo.item.stage.on(egret.TouchEvent.TOUCH_END, s.onTouchEnd, s);
    }

    private onTouchEnd(e: egret.TouchEvent): void {
    let s = this;
    if (s.isTween) {
    return;
    }
    if (s.vo.x == s.vo.item.x) {
    return;
    }
    let tm: number = Math.abs(s.vo.x - s.vo.item.x) < 5 ? 0 : 200;
    s.vo.item.parent.off(egret.TouchEvent.TOUCH_MOVE, s.onTouchMove, s);
    s.vo.item.stage.off(egret.TouchEvent.TOUCH_END, s.onTouchEnd, s);
    if (Math.abs(s.vo.x - s.vo.item.x) < s.totalOffX) {
    for (let vo of s.items) {
    egret.Tween.get(vo.item).to({ x: vo.x, y: vo.y }, tm);
    }
    }
    }

    private onTouchMove(e: egret.TouchEvent): void {
    let s = this;
    if (s.isTween || !s.startX) {
    return;
    }
    s.currOffX = e.stageX - s.startX;
    s.setItemPoint();
    }

    private setItemPoint(): void {
    let s = this;
    if (Math.abs(s.currOffX) > s.vo.item.width) {
    return;
    }
    if (s.currOffX != s.vo.x) {
    s.vo.item.x = s.vo.x + s.currOffX;
    s.vo.prevVo.item.x = s.vo.prevVo.x - s.currOffX;
    s.vo.nextVo.item.x = s.vo.nextVo.x - s.currOffX;
    if (Math.abs(s.vo.x - s.vo.item.x) >= s.totalOffX) {
    s.isTween = true;
    if (s.currOffX < 0) {
    s.vo.prevVo.item.removeSelf();
    s.vo.item.parent.addChildAt(s.vo.prevVo.item, s.vo.item.parent.numChildren);
    }
    else {
    s.vo.nextVo.item.removeSelf();
    s.vo.item.parent.addChildAt(s.vo.nextVo.item, s.vo.item.parent.numChildren);
    }
    for (let vo of s.items) {
    if (s.currOffX > 0) {
    egret.Tween.get(vo.item).to({ x: vo.prevVo.x, y: vo.prevVo.y, rotation: vo.prevVo.rotation, scaleX: vo.prevVo.scaleX, scaleY: vo.prevVo.scaleY }, 300).call(onComplete, s, [vo]);
    egret.Tween.get(vo.item["img_alpha"]).to({ alpha: vo.prevVo.item["img_alpha"].alpha }, 200);
    }
    else {
    egret.Tween.get(vo.item).to({ x: vo.nextVo.x, y: vo.nextVo.y, rotation: vo.nextVo.rotation, scaleX: vo.nextVo.scaleX, scaleY: vo.nextVo.scaleY }, 300).call(onComplete, s, [vo]);
    egret.Tween.get(vo.item["img_alpha"]).to({ alpha: vo.nextVo.item["img_alpha"].alpha }, 200);
    }
    }
    }
    }

    function onComplete(vo: ComRingVo) {
    let s = this;
    vo.parse(vo.item);
    if (s.isTween) {
    s.isTween = false;
    if (s.currOffX < 0) {
    s.vo = s.vo.prevVo;
    }
    else {
    s.vo = s.vo.nextVo;
    }
    s.vo.item["img_alpha"].touchEnabled = false;
    s.vo.prevVo.item["img_alpha"].touchEnabled = true;
    s.vo.nextVo.item["img_alpha"].touchEnabled = true;
    s.startX = 0;
    s.dispatchEventWith(egret.Event.CHANGE, true, s.vo.item);
    }
    }
    }

    public dispose(): void {
    let s = this;
    s.removeEvent();
    }
    }

    export class ComRingVo {

    public item: egret.DisplayObject;
    public prevVo: ComRingVo;
    public nextVo: ComRingVo;
    public x: number;
    public y: number;
    public scaleX: number;
    public scaleY: number;
    public rotation: number;

    public parse(item: egret.DisplayObject): void {
    let s = this;
    s.item = item;
    s.x = item.x;
    s.y = item.y;
    s.scaleX = item.scaleX;
    s.scaleY = item.scaleY;
    s.rotation = item.rotation;
    }
    }
    }

  • 相关阅读:
    关于fft后图像的纵轴问题
    matlab 与 modelsim 联调 cic抽取滤波器
    z变换的性质
    转载 iir直接i型和直接ii型滤波器
    第十六篇:初探IO复用
    第十五篇:关于TCP通信程序中数据的传递格式
    第十四篇:回射程序中的异常分析
    第十三篇:并发回射服务器的具体实现及其中僵尸子进程的清理( 下 )
    loj 1031(区间dp+记忆化搜索)
    loj 1150(spfa预处理+二分+最大匹配)
  • 原文地址:https://www.cnblogs.com/youziwulala/p/12654443.html
Copyright © 2020-2023  润新知