Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Зум; скролл и панорама (http://www.flasher.ru/forum/showthread.php?t=205237)

Маруська 26.11.2013 02:49

Зум; скролл и панорама
 
Вложений: 1
задача: необходимо сделать скроллинг объектов, как это обычно бывает на ios.
Использую объект, составленный из 'страниц', называемый cont
всё чудно и прелестно работает вот так:
Код AS3:

var shir:Number=cont.width;
var vis:Number=cont.height;
 
var offsetX,offsetY:Number;       
var cord:Number=0;
var k, intervalID, moving:Number;
 
if(Multitouch.supportsGestureEvents){
                        cont.addEventListener(MouseEvent.MOUSE_DOWN, startDraggingX);
                        cont.addEventListener(MouseEvent.MOUSE_UP, stopDraggingX);
                        }
 
function startDraggingX(event:MouseEvent):void
                {        trace(cont.x)
                        offsetX = event.stageX-cont.x;
                        cont.addEventListener(MouseEvent.MOUSE_MOVE, moveImageX);
                }
 
function stopDraggingX(event:MouseEvent):void
                {k=0;
                        cont.removeEventListener(MouseEvent.MOUSE_MOVE, moveImageX);
                        if (cont.x>Math.round(-512)){moving=-(cont.x);}
                        if (cont.x<Math.round(-cont.width/3+512)){moving=-(cont.width/3+cont.x);}
                        if (cont.x<Math.round(-cont.width/3*2+512)){moving=-(cont.x+cont.width/3*2);}
                        intervalID = setTimeout( place,1 );
                        }
 
function place () {
        if(k<=5){
        intervalID = setTimeout( place, 1);
        k=k+0.5;
        cont.x+=moving/11+(cont.width/shir-1)*9;
        }
        cord=cont.x;
}
 
function moveImageX(event:MouseEvent):void
                {       
                        if (cont.x<=0+(cont.width/shir-1)*430)
{
                        if (cont.x>=Math.round(-cont.width/3*2)-(cont.width/shir-1)*430)
                        {cont.x = (event.stageX - offsetX);
                        if (cont.x>Math.round(-512)){fill.x=50;}
                        if (cont.x<Math.round(-cont.width/3+512)){if (cont.x>Math.round(-cont.width/3-512)){fill.x=80;}}
                        if (cont.x<Math.round(-cont.width/3*2+512)){fill.x=110;} 
                        if (cont.x>0+(cont.width/shir-1)){cont.x=0+(cont.width/shir-1)*430}
                        if (cont.x<Math.round(-cont.width/3*2)-(cont.width/shir-1)*430){cont.x=Math.round(-cont.width/3*2)-(cont.width/shir-1)*430}
                        event.updateAfterEvent();
                        }
                }
                }

тут конечно чёрт ногу сломит, ибо пытаюсь добиться результата уже 2-е суток без сна.
Возникает проблема, когда я добавляю зум на объект. надо, чтобы как и в IOS: при достижении условного края "страницы", новая страница занимала координату 0 и восстанавливала свой размер. вот с этим у меня проблемы. Куда только и чего только не вписывала - результаты плачевные.
Если вдруг найдётся тут кто-то сердобольный, кто поможет мне решить проблему - исходник в приложении

А вдруг у кого готовый плагин есть - поделитесь, ну пожалуйста? сил уже нет...

Isfet 28.11.2013 07:39

пересохраните исходник в cs5

вообще это делается не так, делаете 2 переменных - leftDragLimit,rightDragLimit, потом при каждом перемещении проверяете
Код AS3:

if(cont.x > rightDragLimit){
    cont.x = rightDragLimit;
}
if(cont.x < leftDragLimit){
    cont.x = leftDragLimit;
}

а эти пределы перемещения пересчитываете каждый раз , когда изменился размер контента (при зуме), или его позиция и т.п.

P.S. у вас учень много магических чисел и повторяющихся операций, такой код будет проблематичен в плане редактирования.


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

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