drag inertia
leglaude1254 Nov 8, 2014 5:06 AMBonjour,
Je cherche a créer une navigation (Effet smart phones/tablettes) avec un déplacement vertical et inertie.
Mon FLA :
3 positions (1) (2) (3) et 3 calques (Navigation/Actions/Conteneur).
Calque 1 sur lequel j'ai placé ma navigation avec les boutons (Instance name / BTN_CHARGER_PDF01), le premier déplace la tête de lecture en position (2) :
Au dessus, le calque 2 (Actions) avec le code suivant :
BTN_CHARGER_PDF01.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame);
function fl_ClickToGoToAndStopAtFrame(event: MouseEvent): void {
gotoAndStop(2);
}
BTN_CHARGER_PDF02.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame_3);
function fl_ClickToGoToAndStopAtFrame_3(event: MouseEvent): void {
gotoAndStop(3);
}
Calque 2 / image 2 sur lequel j'ai placé un conteneur nommé "content_mc"
Au dessus, le calque 2 (Actions) avec le code suivant :
import flash.events.MouseEvent;
import flash.events.Event;
content_mc.y = -900;
var currentStep:Number = content_mc.y;
var step:Number = 300;
var max:Number = 0;
var min:Number = -1800;
var distMin:Number = 100;
var nextY:Number = currentStep;
var startY:Number;
var offsetY:Number;
var moving:Boolean = false;
var smooth:Number = 0.15;
var mouseIsUp:Boolean = true;
content_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
function onDown(e:MouseEvent):void{
offsetY = content_mc.mouseY;
startY = mouseY;
moving = true;
mouseIsUp = false;
if(!hasEventListener(Event.ENTER_FRAME))addEventListener(Event.ENTER_FRAME,update);
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
stage.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
function onUp(e:MouseEvent):void{
mouseIsUp = true;
var dy:Number = mouseY - startY;
if( dy < -distMin){
currentStep -= step;
if(currentStep < min) currentStep = min;
}else if(dy > distMin){
currentStep += step;
if(currentStep > max) currentStep = max;
}
nextY = currentStep;
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
stage.removeEventListener(MouseEvent.MOUSE_UP,onUp);
}
function onMove(e:MouseEvent):void{
nextY = mouseX - offsetY;
}
function update(e:Event):void{
if(moving){
content_mc.y -= (content_mc.y - nextY) * smooth;
if(mouseIsUp && Math.abs(content_mc.y - nextY) < 1){
content_mc.y = nextY;
moving = false;
removeEventListener(Event.ENTER_FRAME,update);
}
}
}
Enfin, sur la troisième image, un second conteneur nommé "content_mc"
Ce codage fonctionne parfaitement pour le premier bouton (déplacement et effet d'inertie)
Mais au clic sur le deuxième bouton, le conteneur s'affiche, mais sans déplacement ni effet d’inertie.
Pouvez vous m'aider ?
Merci


