Я сделал шкалу времени.Это работает, но я сталкиваюсь с несколькими проблемами.
- Когда я нажимаю в конце дорожки, скруббер должен идти и останавливаться в конце дорожки ползунка, но вместо этого он идет в конецдорожка, затем переходит к началу анимации и воспроизводит анимацию.
- Скруббер не движется плавно.Это немного застряло.Он не перемещается свободно.
Я прикрепил файл fla на тот случай, если кто-то захочет его увидеть.ссылка http://www.mediafire.com/?cyk84zf0ndq6r. Может кто-нибудь сказать мне, где я иду не так?
import flash.geom.Rectangle;
import flash.events.MouseEvent;
var barLength : Number = slider_mc.bar.width - slider_mc.scrub.width;
var rect : Rectangle = new Rectangle (slider_mc.bar.x, slider_mc.scrub.y, barLength, 0);
var moviePlaying:Boolean = true;
slider_mc.scrub.buttonMode = true;
slider_mc.scrub.addEventListener(MouseEvent.MOUSE_DOWN, this.scrubMouseDownHandler);
function scrubMouseDownHandler (event : MouseEvent) : void {
this.addEventListener("enterFrame",onEnterFrame);
slider_mc.scrub.addEventListener (MouseEvent.MOUSE_MOVE, this.scrubMouseMoveHandler);
slider_mc.scrub.addEventListener(MouseEvent.MOUSE_UP, this.scrubRemoveListenerHandler);
slider_mc.scrub.addEventListener(MouseEvent.MOUSE_OUT, this.scrubRemoveListenerHandler);
slider_mc.scrub.startDrag (false, rect);
}
function scrubMouseMoveHandler (event : MouseEvent) : void {
var spanPercentage : Number = (slider_mc.scrub.x - slider_mc.bar.x) / barLength;
var framePosition : int = int (animationMc.totalFrames * spanPercentage);
if (framePosition < 1) framePosition = 1 ;
slider_mc.bar.sliderFill_mc.scaleX = ((440/animationMc.totalFrames) * animationMc.currentFrame);
//trace (framePosition);
if (moviePlaying==true) {
animationMc.gotoAndPlay(framePosition);
//moviePlaying = false;
} else if(moviePlaying==false) {
animationMc.gotoAndStop(framePosition);
}
}
function scrubRemoveListenerHandler (event : MouseEvent) : void {
slider_mc.scrub.removeEventListener (MouseEvent.MOUSE_MOVE, this.scrubMouseMoveHandler);
slider_mc.scrub.removeEventListener(MouseEvent.MOUSE_UP, this.scrubRemoveListenerHandler);
slider_mc.scrub.removeEventListener (MouseEvent.MOUSE_OUT, this.scrubRemoveListenerHandler);
slider_mc.scrub.stopDrag ();
}
slider_mc.bar.sliderFill_mc.width = 0;
this.addEventListener("enterFrame",onEnterFrame);
function onEnterFrame(e:Event) {
//By default scrub keeps on moving along with animation at the start of swf, when it is published
//sl.value = this.currentFrame;
slider_mc.scrub.x = Math.floor((barLength/animationMc.totalFrames) * animationMc.currentFrame);
//it causes fill to scale along with scrub
slider_mc.bar.sliderFill_mc.scaleX((440/animationMc.totalFrames) * animationMc.currentFrame);
/////CURRENT TIME///
var currentSeconds = Math.floor(animationMc.currentFrame/24);
var CurrentInput = currentSeconds;
var timeElapsed = (CurrentInput > 3600 ? Math.floor(CurrentInput/3600) + ':':'') //hours
+(CurrentInput%3600 < 600 ? '0':'')+Math.floor(CurrentInput%3600/60)+':' //minutes
+(CurrentInput%60 < 10 ? '0':'')+CurrentInput%60; //seconds
//trace(timeElapsed);
currentTime.text = timeElapsed;
}
pause_btn.addEventListener(MouseEvent.CLICK, pauseAnim);
function pauseAnim(event:MouseEvent):void {
//this.removeEventListener("enterFrame",onEnterFrame);
moviePlaying = false;
animationMc.stop();
}
play_btn.addEventListener(MouseEvent.CLICK, playAnim);
function playAnim(event:MouseEvent):void{
this.addEventListener("enterFrame",onEnterFrame);
moviePlaying = true;
animationMc.play();
}
slider_mc.buttonMode = true;
slider_mc.useHandCursor = true;
slider_mc.bar.addEventListener(MouseEvent.CLICK, snapTo);
function snapTo(event:MouseEvent) {
slider_mc.scrub.x = mouseX;
//slider_mc.bar.sliderFill_mc.scaleX =((440/animationMc.totalFrames) * animationMc.currentFrame);
var spanPercentage : Number = (slider_mc.scrub.x - slider_mc.bar.x) / barLength;
var framePosition : int = int (animationMc.totalFrames * spanPercentage);
slider_mc.bar.sliderFill_mc.scaleX =((440/animationMc.totalFrames) * animationMc.currentFrame);
//trace (framePosition);
if (moviePlaying==true) {
animationMc.gotoAndPlay(framePosition);
//moviePlaying = false;
} else if(moviePlaying==false) {
animationMc.gotoAndStop(framePosition);
}
}
///better because it gives to leading zeros///////////
//TOTAL TIME///
var totalSeconds = Math.floor(animationMc.totalFrames/24);
var input = totalSeconds;
var totalAnimTime = (input > 3600 ? Math.floor(input/3600) + ':':'') //hours
+ (input%3600 < 600 ? '0':'') + Math.floor(input%3600/60)+':' //minutes
+ (input%60 < 10 ? '0':'') + input%60; //seconds
//trace(totalAnimTime);
totaltime.text = "/"+totalAnimTime;