Конечно, вы можете оставить два массива и обновить или манипулировать вторым, чтобы он соответствовал сортировке первого, но это утомительно и будет все более запутанным, если вы когда-нибудь захотите добавить больше информации в свои слайды (например, заголовки)., подписи и т. д.) - вам нужно будет сохранить массив заголовков, массив заголовков и т. д. и выполнить одинаковую сортировку для всех этих.
Чище (и достигается лучшая производительность) хранить ассоциативные массивы (в AS, это Objects) всех свойств, связанных с каждым слайдом, внутри одного сортировочного массива, вместо того, чтобы иметь отдельные массивы для каждого свойства.
В моем примере ниже каждый объект в массиве имеет свойства x, y, thumb и slide.Подростки манипулируют числовыми значениями x и y, а расположение большого пальца обновляется при изменении значений.Сортировка основана на числовом значении x вместо фактической позиции большого пальца.
var project_array:Array = [];
//---
// Some code initializing the array here.
// Array elements should each look something like this:
var object:Object = {
x: project_thumb.x,
y: project_thumb.y,
thumb: project_thumb,
slide: project_slide
};
//---
function sortSlides():void
{
project_array.sortOn( 'x', Array.NUMERIC );
for (var i:int = 0; i < project_array.length; i++)
{
var obj:Object = project_array[i];
TweenMax.to( obj, 0.5,
{
// tween numeric values instead of thumb position
x:(obj.thumb.width + thumb_spacing) * (i % thumb_cols),
y:(obj.thumb.width + thumb_spacing) * int(i / thumb_cols),
// update thumb position according to values
onUpdate: function ( item:Object )
{
item.thumb.x = item.x;
item.thumb.y = item.y;
},
onUpdateParams:[obj],
ease:Expo.easeInOut
} );
}
}
function onThumbRelease( e:MouseEvent ):void
{
e.currentTarget.stopDrag();
// update sorting values after drag
for ( var i:int = 0; i < project_array.length; i++)
{
var obj:Object = project_array[i];
obj.x = obj.thumb.x;
obj.y = obj.thumb.y;
}
sortSlides();
// call slide here:
for ( i = 0; i < project_array.length; i++)
{
obj = project_array[i];
if (e.currentTarget == obj.thumb)
{
doSomethingWithSlide (obj.slide);
break;
}
}
}