- package com.fylibs.components.effects {
- import com.fylibs.utils.LoaderQueues;
- import com.tweener.transitions.Tweener;
- import com.views.LoadingView;
- import flash.display.Bitmap;
- import flash.display.Sprite;
- import flash.utils.clearTimeout;
- import flash.utils.setTimeout;
- /**
- * @author: Frost.Yen
- * @E-mail:
- * @create: 2016-4-4 下午10:47:20
- * 幻灯片播放
- */
- public class SlideShow extends Sprite {
- private
- var _container: Sprite;
- private
- var _slideWidth: Number;
- private
- var _slideHeight: Number;
- private
- var _timeoutFade: uint; //控制切换图片的setTimeout
- private
- var _intervalFade: Number = 1000 * 5; //5s切换一次
- private
- var _duration: Number = 3; //切换过渡时长
- private
- var _dotBar: Sprite;
- private
- var _hasDot: Boolean;
- private
- var _page: int;
- private
- var _loadingView: LoadingView;
- public
- function SlideShow(w: Number, h: Number, hasDot: Boolean = false) {
- _slideWidth = w;
- _slideHeight = h;
- _hasDot = hasDot;
- initViews();
- }
- private
- function initViews() : void {
- _dotBar = new Sprite();
- _container = new Sprite();
- _loadingView = new LoadingView();
- this.addChild(_container);
- this.addChild(_dotBar);
- }
- public
- function setSlide(url: Array) : void {
- _page = url.length;
- _loadingView.addLoading(this, 1920, 770, 0, 74);
- for (var i: int = 0; i < _page; i++) {
- LoaderQueues.getInstance().addRes(url[i], onSlideLoaded);
- }
- if (_hasDot) {
- initDot();
- }
- }
- private
- function onSlideLoaded(bmp: Bitmap) : void {
- var sp: Sprite = new Sprite();
- bmp.width = _slideWidth;
- bmp.height = _slideHeight;
- sp.addChild(bmp);
- sp.name = "sp_" + _container.numChildren;
- _container.addChildAt(sp, 0);
- if (_container.numChildren == _page) {
- _loadingView.removeLoading();
- control(_container.numChildren - 1);
- }
- }
- /**
- * 控制播放内容的渐变轮换
- */
- private
- function fadeControl() : void {
- if (_container.numChildren > 1) {
- setDotState(int(_container.getChildAt(_container.numChildren - 2).name.split("_")[1]));
- Tweener.addTween(_container.getChildAt(_container.numChildren - 1), {
- alpha: 0,
- time: _duration
- });
- Tweener.addTween(_container.getChildAt(_container.numChildren - 2), {
- alpha: 1,
- time: _duration,
- onComplete: fadeComplete
- });
- }
- }
- /**
- * 播放内容轮换渐变结束,设置内容的层次
- */
- private
- function fadeComplete() : void {
- control(_container.numChildren - 2);
- _container.setChildIndex(_container.getChildAt(_container.numChildren - 1), 0);
- }
- /**
- * 根据索引去处理图片轮换
- * @param id
- */
- private
- function control(id: int) : void {
- var obj: Sprite = _container.getChildAt(id) as Sprite;
- _timeoutFade = setTimeout(fadeControl, _intervalFade);
- }
- /**
- * 初始化表示页面的小圆点
- */
- private
- function initDot() : void {
- disposeDot();
- for (var i: int = 0; i < _page; i++) {
- var dot: Sprite = createDot();
- dot.x = i * (dot.width + 8);
- if (i == 0) {
- dot.alpha = 1;
- } else {
- dot.alpha = 0.5;
- }
- _dotBar.addChild(dot);
- }
- _dotBar.x = (_slideWidth - _dotBar.width) * 0.5;
- _dotBar.y = _slideHeight - 20;
- }
- /**
- * 创建表示页面的小圆点
- */
- private
- function createDot() : Sprite {
- var dot: Sprite = new Sprite();
- dot.graphics.beginFill(0xffffff, 1);
- dot.graphics.drawCircle(0, 0, 5);
- dot.graphics.endFill();
- return dot;
- }
- /**
- * 移除表示页面的小圆点
- */
- private
- function disposeDot() : void {
- while (_dotBar.numChildren) { (_dotBar.getChildAt(0) as Sprite).graphics.clear();
- _dotBar.removeChildAt(0);
- }
- }
- /**
- * 设置表示页码的小圆点状态
- * @param id 小圆点的id
- */
- private
- function setDotState(id: int) : void {
- for (var i: int = 0; i < _dotBar.numChildren; i++) {
- if (id == i) {
- _dotBar.getChildAt(i).alpha = 1;
- } else {
- _dotBar.getChildAt(i).alpha = 0.5;
- }
- }
- }
- public
- function stop() : void {
- clearTimeout(_timeoutFade);
- }
- public
- function play() : void {
- _timeoutFade = setTimeout(fadeControl, _intervalFade);
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2003996.html