|
|
|||||
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Проблема с функционалом zoom in
Доброго времени суток.
Я пытаюсь добавить функционал зума. У меня есть скроллер (s:Scroller), в котором есть канва - can типа s:Group, на которой лежат некоторые элементы. При клике по канве мне нужно приблизить канву так чтобы точка в которую кликнули находилась в центре экрана, или как можно ближе к центру, насколько это позволяет скроллер. <s:Scroller id="scroll"> <s:Group id="can"> ...... </s:Group> </s:Scroller> <s:Group id="zoomCover" click="zoomIn()" > ...... </s:Group> Вот так вычисляю точку в которую в итоге нужно скролить //та самая точка, 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; } Флексовый Zoom не сдвигает скроллер, то есть просто увеличивает канву с origin в (0,0). UPD.: Оказывается если задать скроллБару value = 100, она не прокрутит контент на 100 пикселей, а переместит свой скроллбар на 100 пикселей. А если у контента скейл > 1 , то контент прокрутится на 100*scale пихелей. Странно это как-то, и в хелпе это не обозначено вообще. И когда свойство maximum приближается к значению длины (или ширины) самого скроллера, контент тупо исчезает. Поэтому правильный ответ Не центрирует точку, но эффект вполне сносный.
__________________
Oomph Последний раз редактировалось AlexLucas; 27.01.2014 в 21:45. |
|
|||||
а скроллер там зачем ?
|
Часовой пояс GMT +4, время: 20:50. |
|
« Предыдущая тема | Следующая тема » |
|
|