Skip to content

Instantly share code, notes, and snippets.

@lostincode
Created January 15, 2011 09:08
Show Gist options
  • Save lostincode/780799 to your computer and use it in GitHub Desktop.
Save lostincode/780799 to your computer and use it in GitHub Desktop.
AS3: quick slider example MOUSE_MOVE instead of startDrag()
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Slider extends Sprite {
private var options:Object = {width:400, height:15, minValue:0, maxValue:100, onUpdate:null, onChange:null};
private var sliderHolder:Sprite;
private var track:Sprite;
private var grip:Sprite;
public function Slider(o:Object=null) {
for (var prop:String in o) {
try {
options[prop] = o[prop];
} catch (e:Error) {}
}
sliderHolder = new Sprite(); //holds everything
sliderHolder.name = 'slider';
track = new Sprite(); //slider track
track.graphics.beginFill( 0xe5e5e5, 1 );
track.graphics.drawRect(0, 0, o.width, o.height);
track.graphics.endFill();
track.name = 'track';
grip = new Sprite(); //slider grip
grip.graphics.beginFill( 0x999999, 1 );
grip.graphics.drawRect(0, 0, o.height, o.height);
grip.graphics.endFill();
grip.mouseEnabled = false;
grip.name = 'grip';
sliderHolder.addChild(track);
sliderHolder.addChild(grip);
addChild(sliderHolder);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
track.addEventListener(MouseEvent.MOUSE_DOWN, sliderClick);
}
private function onRemovedFromStage(e:Event):void {
removeEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
track.removeEventListener(MouseEvent.MOUSE_DOWN, sliderClick);
track,grip,sliderHolder = null;
}
private function sliderClick(e:MouseEvent):void {
updateGripPos();
track.removeEventListener(MouseEvent.MOUSE_DOWN, sliderClick);
stage.addEventListener(MouseEvent.MOUSE_UP, sliderMouseUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, sliderMouseMove);
}
private function updateGripPos():void {
grip.x = Math.round(track.mouseX-grip.width/2);
if(grip.x < 0) grip.x = 0;
if(grip.x > track.width-grip.width) grip.x = track.width-grip.width;
if(options.onChange != null) options.onChange(rangeValue(grip.x/(track.width-grip.width)*100, options.minValue, options.maxValue));
}
private function sliderMouseUp(e:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_UP, sliderMouseUp);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, sliderMouseMove);
track.addEventListener(MouseEvent.MOUSE_DOWN, sliderClick);
if(options.onUpdate != null) options.onUpdate(rangeValue(grip.x/(track.width-grip.width)*100, options.minValue, options.maxValue));
}
private function sliderMouseMove(e:MouseEvent):void {
e.updateAfterEvent();
updateGripPos();
}
private function rangeValue( per:Number, min:Number, max:Number ):Number {
return ((( max - min ) / 100 ) * per ) + min;
}
}
}
/*
// Example Usage:
// -----------------------------
var slider:Slider = new Slider({width:400, height:25, minValue:100, maxValue:350, onUpdate:sliderUpdate});
slider.x = slider.y = 20;
addChild(slider);
function sliderUpdate(value:Number):void {
trace('val = '+value);
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment