hi, i’m working with a carousel and i almost got it to work but…
here is the case; i got on active item and 2 items at righttside and leftside of the activ. Behind the activ i stack all elements i wont view… I’ve managed to move left and rightsided items through it’s next or previous position, but when i press one in the stack i can’t figure out how to move them through positions.
please see attach file, you find TweenMax here http://blog.greensock.com/tweenmaxas3/
and the code (huge…);
import flash.display.*;
import flash.events.*;
import gs.TweenMax;
import fl.motion.easing.*;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var active:int = 0;
var arr:Array = [];
var arr_temp:Array = [0,1,2,3,4];
var sortedItems:Array = [];
var m:int = 10;
var WIDTH:Number = 640;
var HEIGHT:Number = 360;
var holder = new MovieClip();
addChild(holder);
for (var i:int=0; i<m; i++)
{
// Display items on scene and set properties
var o:MovieClip = new Icon();
o.id = i;
o.name = "icon"+i;
o.pos = i;
o.txt.text = i;
o.txt.autoSize = TextFieldAutoSize.CENTER;
o.buttonMode = true;
o.mouseEnabled = true;
o.mouseChildren = false;
o.addEventListener(MouseEvent.CLICK, clickHandler);
o.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
o.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
addChild(o);
// End Display
// <<< Temp
TweenMax.to(o.bg, 0,
{
tint:Math.random()*0xFF0000
});
// >>>
arr.push(o);
sortedItems.push(o);
var btn = new Btn();
btn.id = i;
btn.name = "btn"+i;
btn.x = 21* i;
btn.y = 2;
btn.txt.text = i;
btn.txt.autoSize = TextFieldAutoSize.CENTER;
btn.buttonMode = true;
btn.mouseEnabled = true;
btn.mouseChildren = false;
btn.addEventListener(MouseEvent.CLICK, clickHandler);
btn.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
btn.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
holder.addChild(btn);
}
function clickHandler(event:MouseEvent):void
{
active = event.currentTarget.id;
activate();
}
function overHandler(event:MouseEvent):void { event.currentTarget.alpha = .5; }
function outHandler(event:MouseEvent):void { event.currentTarget.alpha = 1; }
// sort
function activate() : void
{
trace ("active: " + active);
var direction:int;
var distance:int;
var arr2 = [];
var arr2 = arr.slice(active).concat(arr.slice(0, active));
var j:int = 0;
var n:int = arr.length;
for (var i:int=0; i<n; i++)
{
var o:MovieClip = arr2*;
var scale:Number = o.scaleX;
var xy:Object;
var bezier:Object;
if (j==0)
{
o.txt.x = 20
xy = activePosition(1);
if(o.x > xy.x)
direction = 1;
else
direction = -1;
}
else if (j==1)
{
o.txt.x = 620;
xy = nextPosition(.8, 100);
}
else if (j==2)
{
o.txt.x = 620;
xy = nextPosition(.6, 150);
}
else if (j==n-2)
{
o.txt.x = 20;
xy = previousPosition(.6, 150);
}
else if (j==n-1)
{
o.txt.x = 20;
xy = previousPosition(.8, 100);
}
else
{
xy = stackPosition(.5);
}
if (direction == 1)
{
var prev = arr2[i-1];
if (i == 0)
prev = arr2[n-1];
bezier =
{
x: prev.x,
y: prev.y,
scale: prev.scaleX
}
}
else
{
var prev = arr2[i+1];
if (i == n-1)
prev = arr2[0];
bezier =
{
x: prev.x,
y: prev.y,
scale: prev.scaleX
}
}
o.bezier = bezier;
o.ax = xy.x; // activate x position
o.ay = xy.y;
o.scale = xy.scale;
o.pos = j;
j++;
}
for (var i:int=0; i<n; i++)
{
var o:MovieClip = arr2*;
var tweenObj:Object =
{
x: o.ax,
y: o.ay,
scaleX: o.scale,
scaleY: o.scale,
bezierThrough:
[{
x: o.bezier.x,
y: o.bezier.y,
scaleX: o.bezier.scale,
scaleY: o.bezier.scale
}],
onUpdate: tweenUpdateHandler,
overwrite:false,
ease:Linear.easeOut,
delay: .2
}
TweenMax.to(o, 1, tweenObj);
}
}
//
function activePosition(scale:Number) : Object
{
var xy:Object =
{
x: Math.round(stage.stageWidth/2 - (WIDTH/2)),
y: Math.round(stage.stageHeight/2 - (HEIGHT/2)),
scale: scale
}
return xy;
}
function nextPosition(scale:Number, distance:Number) : Object
{
var xy:Object =
{
x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2) + ((1-scale)*WIDTH/2) + distance),
y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
scale: scale
}
return xy;
}
function previousPosition(scale:Number, distance:Number) : Object
{
var xy:Object =
{
x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2) - ((1-scale)*WIDTH/2) - distance),
y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
scale: scale
}
return xy;
}
function stackPosition(scale:Number) : Object
{
var xy:Object =
{
x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2)),
y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
scale: scale
}
return xy;
}
//
function tweenUpdateHandler() : void {arrange()}
function arrange() : void
{
sortedItems.sortOn("scaleY", Array.NUMERIC);
var i:int = sortedItems.length;
while (i--) {
if (getChildAt(i) != sortedItems*) {
setChildIndex(sortedItems*, i);
}
}
}
// startup call
activate();
stop();
function activate does the magic.
brilliant if anybody could help