Просмотр полной версии : Изменение координаты при изменении масштаба
SeekerIU5
24.07.2009, 17:24
Проблема в следующем:
Есть Loader-ы с загруженными изображениями. Требуется, чтобы при наведении мыши картинка увеличивалась в размерах, а при уведении курсора - возвращалась в нормальное состояние. /
Соответственно, сделал обработчики onRollOver и onRollOut, в которых делаю изменение _xscale и _yscale.
_root["my_loader"].onRollOver = function()
{
this._xscale = 150;
this._yscale = 150;
}
_root["my_loader"].onRollOut = function()
{
this._xscale = 100;
this._yscale = 100;
}
Проблема в том, что при передвижении мыши к левой границе лоадера начинается мигание изображения, т.к. при уменьшении масштаба оюбъект сдвигается влево, вновь срабатывает сообытие onRollOver, масштаб увеличивается, объект сдвигается вправо и т.д.
Применение SetSize дает тот же эффект.
Как с этим бороться?
И заодно глупый вопрос: как обработать для UIScrollBar событие прекращения скроллинга?
Вроде нет зацикливания при вашем коде на тестовом мувике. Навели (произошло onRollOver) - mc увеличился - убрали (произошло onRollOut) - mc восстановился до 100%.
А движение влево зачем?
SeekerIU5
24.07.2009, 17:54
Вроде нет зацикливания при вашем коде на тестовом мувике. Навели (произошло onRollOver) - mc увеличился - убрали (произошло onRollOut) - mc восстановился до 100%.
А движение влево зачем?
Попробуйте навести мышку на иконку, после чего медленно придвинуть её к левой границе иконки. Эффект смещения координаты и зацикливания заметен.
Это, кстати, и в хелпе задокументировано:
Scaling the local coordinate system affects the _x and _y property settings, which are defined in whole pixels. For example, if the parent movie clip is scaled to 50%, setting the _x property moves an object in the movie clip by half the number of pixels as it would if the movie were set at 100%.
Если содержимое мувика ориентировно по центру, и нет никаких движений, а только изменение масштаба, то все нормально.
SeekerIU5
24.07.2009, 18:33
Если содержимое мувика ориентировно по центру, и нет никаких движений, а только изменение масштаба, то все нормально.
Простите за глупый вопрос: как ориентировать содержимое Loader-а по центру? :o
Часто приходится иметь дело с динамическим контентом и я использую для этих целей специально написанную функцию, очень удобно:
//////// ФУНКЦИЯ ПОДГОНКИ ЗАГРУЖЕННЫХ КАРТИНОК ПО РАЗМЕРУ И ЦЕНТРУ СЛОТА /////////////////
resizeClip = function(mc, maxWidth, maxHeight) {
var ratio_x = maxWidth / mc.image._width;
var ratio_y = maxHeight / mc.image._height;
if (ratio_x <= ratio_y) {
if (ratio_x < 1) {
// ширина равна максимальной а высота в соответствии с пропорцией
mc.image._width = maxWidth;
mc.image._yscale = mc.image._xscale;
}
} else {
if (ratio_y < 1) {
// высота равна максимальной а ширина в соответствии с пропорцией
mc.image._height = maxHeight;
mc.image._xscale = mc.image._yscale;
}
}
// центруем
mc.image._x = -1 * Math.round(mc.image._width/2);
mc.image._y = -1 * Math.round(mc.image._height/2);
//сглаживаем
mc.image.forceSmoothing = true;
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcLoader.addListener(listener);
//после загрузки, ресайзим о центруем:
listener.onLoadInit = function(target_mc:MovieClip) {
resizeClip(target_mc._parent, 126, 84);
}
//а перед загрузкой где-то, где нужно создается контейнер и внутри него еще контейнер image:
slide_mc.createEmptyMovieClip("image", 0);
mcLoader.loadClip(url, slide_mc.image);
То есть ресайзим и центруем клип-контейнер image внутри slide_mc.
Логика скрипта здесь такая - выполняется снизу вверх.
Это немного видоизмененный вариант функции с урока:
http://noregret.org/tutor/resize/
SeekerIU5
24.07.2009, 23:01
Спасибо большое. Все таки повторю глупый вопрос(отдельной темы для него жалко): как обработать событие прекращения сскролллинга? Т.е. момент, когда пользователь прекратил перетаскивание ползунка?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.