Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.01.2014, 17:42
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 1  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
По умолчанию Проблема с функционалом zoom in

Доброго времени суток.
Я пытаюсь добавить функционал зума.
У меня есть скроллер (s:Scroller), в котором есть канва - can типа s:Group, на которой лежат некоторые элементы.
При клике по канве мне нужно приблизить канву так чтобы точка в которую кликнули находилась в центре экрана, или как можно ближе к центру, насколько это позволяет скроллер.
Код AS3:
        <s:Scroller id="scroll">
  <s:Group id="can">
             ......
    </s:Group>
        </s:Scroller>
<s:Group id="zoomCover" click="zoomIn()" >
               ......
	</s:Group>
Над скролером висит другой s:Group равный по размерам и позиции скроллу который ловит клик.
Вот так вычисляю точку в которую в итоге нужно скролить
Код AS3:
//та самая точка, zoomFactor - это насколько мы увеличим канву для зума
//в моём случае увеличение происходит в 2 раза при каждом клике, т.е. zoomFactor будет равняться 2, 4, 8 итд.
public function zoomIn(e:MouseEvent):void
{
var scrollPoint:Point = new Point((scroll.horizontalScrollBar.value + e.localX) * zoomFactor / can.scaleX - scroll.width / 2, 
                        (scroll.verticalScrollBar.value + e.localY) * zoomFactor / can.scaleY - scroll.height / 2);
can.scaleY = can.scaleX = zoomFactor;
 
var scrollX:Number = scrollPoint.x 
var scrollY:Number = scrollPoint.y
//после чего нужно обновить скроллер
scroll.validateNow();
//и, собственно, скролить скроллер
    if (scrollX > scroll.horizontalScrollBar.maximum) 
		scroll.horizontalScrollBar.value = scroll.horizontalScrollBar.maximum;
	else if (scrollX < scroll.horizontalScrollBar.minimum)
		scroll.horizontalScrollBar.value = scroll.horizontalScrollBar.minimum;
	else 
		scroll.horizontalScrollBar.value = scrollX;
 
	if (scrollY > scroll.verticalScrollBar.maximum) 
		scroll.verticalScrollBar.value = scroll.verticalScrollBar.maximum;
	else if (scrollY < scroll.verticalScrollBar.minimum)
		scroll.verticalScrollBar.value = scroll.verticalScrollBar.minimum;
	else 
		scroll.verticalScrollBar.value = scrollY;	
}
Но в итоге всё равно зумится криво, нормально получается только при первом зуме, когда scale у канвы = 1. Видимо где-то в расчётах ошибаюсь, но не могу понять где.
Флексовый Zoom не сдвигает скроллер, то есть просто увеличивает канву с origin в (0,0).

UPD.:
Оказывается если задать скроллБару value = 100, она не прокрутит контент на 100 пикселей, а переместит свой скроллбар на 100 пикселей. А если у контента скейл > 1 , то контент прокрутится на 100*scale пихелей.
Странно это как-то, и в хелпе это не обозначено вообще.
И когда свойство maximum приближается к значению длины (или ширины) самого скроллера, контент тупо исчезает.
Поэтому правильный ответ
Код AS3:
scroll.horizontalScrollBar.value + e.localX / zoomFactor // то же самое с verticalBar
Не центрирует точку, но эффект вполне сносный.
__________________
Oomph


Последний раз редактировалось AlexLucas; 27.01.2014 в 21:45.
Старый 28.01.2014, 15:13
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 2  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
а скроллер там зачем ?

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.