PDA

Просмотр полной версии : Галерея в отдельных роликах, масштабирование, передача данных.


vivado
27.06.2011, 11:39
Всем привет,
Подскажите как осуществить такую задумку. Нужно чтобы на странице сайта боковое меню с превьюшками галереи всегда было прижато к правому краю и не масштабировалось(!) а картинка загружаемая при нажатии на превьюшку центрировалась и изменяла размер в зависимости от экрана браузера. Примерно как тут Пример (http://www.iaincrawford.com/#/BEAUTY/beauty%20/1)

Нужно ли мне делать два отдельных ролика или как то можно запрограммировать все в одном?
Если два отдельных то как осуществить передачу данных из одного ролика в другой (ну например чтоб при нажатие на превьюшку в первом ролике, основная картинка открывалась во втором).

Просто галерея уже сделана, но все в одном ролике и масштабируется естественно по экрану все сразу и боковые менюшки и основная картинка. Помогите пожалуйста. Заранее спасибо.

dark256
28.06.2011, 10:36
Ищите на форуме рецепт "резинового ролика"

vivado
29.06.2011, 16:56
Ищите на форуме рецепт "резинового ролика"

Спасибо большое сроду бы не догадался искать по данному запросу. Получилось у меня следущее


// Настройка сцены
Stage.scaleMode = "noScale";
Stage.align = "TL";

// создадим объект для реагирования на изменение габаритов окна
var resize_obj = {};

// Задаем начальные ширину и высоту окна
resize_obj.normal_width = 400;
resize_obj.normal_height = 300;

// список объектов, которые будем перемещать
resize_obj.position = [center_block, // центральный блок
block2 // блок справа
];

// реакция на изменения габаритов окна
resize_obj.onResize = function(){

//Центрирование центрального блока )))
center_block._x=Stage.width/2;
center_block._y=Stage.height/2;

//Масштабирование центрального блока (!!!)
center_block.width=Stage.width;
center_block.height=Stage.height;

//Смещение блока справа + прижатие его к правой стенке
block2._x=Stage.width-66.7;
};

// связь между классом Stage и объектом resize_obj
Stage.addListener(resize_obj);


Теперь бьюсь скорее над математической задачей как заставить центральный блок масштабироваться под окно ролика, но при этом сохранять свои пропорции.
Так естественно не получается...

center_block.width=Stage.width;
center_block.height=Stage.height;


Нужно как то по хитрому прописать формулу, помогите плиз.

mooncar
29.06.2011, 19:05
Ресайз для произвольного мувика.
function resizeClip(mc:MovieClip, maxWidth:Number, maxHeight:Number)
{
var ratio_x = maxWidth / mc._width;
var ratio_y = maxHeight / mc._height;

if (ratio_x <= ratio_y)
{
if (ratio_x < 1)
{
mc._width = maxWidth;
mc._yscale = mc._xscale;
}
}
else
{
if (ratio_y < 1)
{
mc._height = maxHeight;
mc._xscale = mc._yscale;
}
}
//центрирование (если начало координат в контейнере находится по центру)
mc._x = -1 * Math.round(mc._width/2);
mc._y = -1 * Math.round(mc._height/2);
}

vivado
30.06.2011, 11:03
Что то не так, код не работает, наверное где то ошибочка.
Может еще нужно прописать для

ratio_y > 1 и ratio_x > 1


А сейчас картинка просто сжимается (((

dark256
30.06.2011, 12:13
var scalefactor = SIZE/pix._width*100
pix._xscale = pix._yscale = scalefactor

где SIZE - тот размер, под который подгоняем.

vivado
30.06.2011, 14:20
var scalefactor = SIZE/pix._width*100
pix._xscale = pix._yscale = scalefactor

где SIZE - тот размер, под который подгоняем.

Смотрите, получается если мне нужно подогнать ролик не только по ширине Stage, но и по высоте, т.е. чтобы он реагировал на изменение как ширины окна, так и высоты окна. Мне нужно прописать два условия?


if (Stage.width<Stage.height){
var scalefactor = Stage.width/pix._width*100
}
else {
var scalefactor = Stage.height/pix._height*100
}

pix._xscale = pix._yscale = scalefactor

Но чтото не выходит у меня "каменный цветок" (((

dark256
30.06.2011, 14:25
Ну да. Все верно. Не пойму что тут может не выходить.
Размер картинки вы берет ПОСЛЕ того как она загружена через MCL ? Или до?
Или вообще у вас loadMovie? :)

vivado
30.06.2011, 14:30
Да дергается почему то ролик, вот исходник

dark256
30.06.2011, 14:33
у меня даже в подписи указан формат флэша, который я могу прочесть :)

vivado
30.06.2011, 14:41
у меня даже в подписи указан формат флэша, который я могу прочесть :)

)))

Вот весь код

// Настройка сцены
Stage.scaleMode = "noScale";
Stage.align = "TL";

// создадим объект для реагирования на изменение габаритов окна
var resize_obj = {};
// Задаем начальные ширину и высоту окна
resize_obj.normal_width = 400;
resize_obj.normal_height = 300;
// список объектов, которые будем перемещать
resize_obj.position = [block2 ]; // блок справа

// реакция на изменения габаритов окна
resize_obj.onResize = function(){

//Масштабирование центрального блока (ВОТ ОН МНЕ И НУЖЕН)
if (Stage.width<Stage.height){
scalefactor = (Stage.width/pic._width)*100;
}
else {
scalefactor = (Stage.height/pic._height)*100;
}
pic._xscale = scalefactor;
pic._yscale = scalefactor;

//Центрирование центрального блока )))
pic._x=Stage.width/2;
pic._y=Stage.height/2;


//Смещение блока справа + прижатие его к правой стенке
block2._x=Stage.width-66.7;
};

// связь между классом Stage и объектом resize_obj
Stage.addListener(resize_obj);




Так вот мой центральный блок както странно дергается при масштабировании иногда задваивается визуально а иногда ваще не масштабируется (((

Добавлено через 4 часа 18 минут
Вот так нормально работает

//Функция изменения размера картинки
function picResize()
{
if (Stage.width<Stage.height){
pic._width = Stage.width;
pic._yscale = pic._xscale;
}
else {
pic._height = Stage.height;
pic._xscale = pic._yscale;
}

//Центрируем картинку
pic._x=Stage.width/2;
pic._y=Stage.height/2;
}