forked from: forked from: スクロールバー (1)
forked from forked from: スクロールバー (1) (diff: 517)
矩形エリアにスクロールバーを実装する リサイズにあわせてスクロールバーを調整する マウスオーバーしないときは表示幅を狭くする マウスオーバーでバーの幅を広くする スクロールバー上にチャプターを設定する: 横スクロール実装 スクロールバー (1)
ActionScript3 source code
/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/lSP2
*/
// forked from tepe's forked from: スクロールバー (1)
// forked from ProjectNya's スクロールバー (1)
//矩形エリアにスクロールバーを実装する
//リサイズにあわせてスクロールバーを調整する
//マウスオーバーしないときは表示幅を狭くする
//マウスオーバーでバーの幅を広くする
//スクロールバー上にチャプターを設定する:
//横スクロール実装
////////////////////////////////////////////////////////////////////////////////
// スクロールバー (1)
////////////////////////////////////////////////////////////////////////////////
package {
import flash.text.TextField;
import flash.display.Sprite;
import flash.display.Shape;
import flash.geom.Matrix;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.InterpolationMethod;
[SWF(backgroundColor="#FFFFFF", width="465", height="465", frameRate="30")]
public class Main extends Sprite {
private var panel:Shape;
private var _mask:Shape;
private var scrollBar:ScrollBar;
public function Main() {
init();
}
private function init():void {
var t:TextField = new TextField();
//scrollBar.setTF(t);
t.border = true;
t.text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n\n\n\n\n\n\n\n\n\n\ncc\n\n\n\n\n\n\n\n\n\n\n\nbb";
t.multiline=true;
t.type ="input";
t.x = 30;
t.y = 30;
t.width=300;
t.height=300;
addChild(t);
//scrollBar = new ScrollBar();
//scrollBar.setTF(t);
var v:vScr = new vScr();
var h:hScr = new hScr();
v.setTF(t);
h.setTF(t);
}
}
}
////////////////////////////////////////////////////////////////////////////////
// ScrollBarクラス
////////////////////////////////////////////////////////////////////////////////
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
class vScr extends Sprite {
private var _width:uint = 16;
private var _height:uint =16;
private var track:Sprite;
private var thumb:Sprite;
private var maxHeight:uint;
private var clickPos:Number;
private var _enabled:Boolean = true;
private var txt:TextField;
public function vScr() {
init();
}
public function setTF(tf:TextField):void{
txt = tf;
txt.addEventListener(Event.SCROLL,onScroll);
tf.parent.addChild(this);
resize();
onScroll();
}
private function onScroll(e:Event=null):void{
resize();
var pos:Number = maxHeight*(txt.scrollV / txt.maxScrollV);
if (txt.scrollV == 0) pos = 0;
if (txt.maxScrollV == txt.scrollV) pos = maxHeight;
thumb.y = pos;
}
private function resize():void{
this.x = txt.x +txt.width +1;
this.y = txt.y;
this.alpha = 0.5;
_height = txt.height+1;
if(txt.textHeight < txt.height){//スクロールバー非表示
txt.parent.removeChild(this);
return;
}
var n:Number = txt.height / txt.textHeight;
var thumbHeight:uint = _height*n;
maxHeight = _height - thumbHeight;
createTrack(_width,_height,0xaaaaaa);
createThumb(_width,thumbHeight,0x888888);
txt.parent.addChild(this);//スクロールバー表示
}
private function init():void {
track = new Sprite();
thumb = new Sprite();
addChild(track);
addChild(thumb);
enabled = true;
thumb.mouseChildren = false;
}
//ドラッグ開始
private function press(evt:MouseEvent=null):void {
thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
//track.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, releaseOutside, false, 0, true);
stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
clickPos = thumb.mouseY;
//clickPos = track.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag, false, 0, true);
}
//ドラッグ解除
private function release(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
//track.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function releaseOutside(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function leave(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
//ドラッグ操作
private function drag(evt:MouseEvent):void {
var position:Number = stage.mouseY - clickPos;
if (position < 0) position = 0;
else if (position > maxHeight) position = maxHeight;
thumb.y = position;
txt.scrollV = Math.round(txt.maxScrollV*(position/maxHeight));
evt.updateAfterEvent();
}
private function click(evt:MouseEvent):void {
var position:Number = track.mouseY - (thumb.height/2);
if (position < 0) position = 0;
if (position > maxHeight) position = maxHeight;
thumb.y = position;
txt.scrollV = Math.round(txt.maxScrollV*(position/maxHeight));
evt.updateAfterEvent();
press();
}
public function get enabled():Boolean {
return _enabled;
}
public function set enabled(param:Boolean):void {
_enabled = param;
thumb.buttonMode = _enabled;
thumb.mouseEnabled = _enabled;
thumb.useHandCursor = _enabled;
track.mouseEnabled = _enabled;
if (_enabled) {
thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
track.addEventListener(MouseEvent.MOUSE_DOWN, click, false, 0, true);
} else {
thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
track.removeEventListener(MouseEvent.MOUSE_DOWN, click);
}
}
//スクロール表示位置
private function createThumb(w:uint, h:uint,c:uint):void {
with(thumb){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
//スクロール範囲
private function createTrack(w:uint, h:uint,c:uint):void {
with(track){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
}
////////////////////////////////////////////////////////////////////////////////
// ScrollBarクラス
////////////////////////////////////////////////////////////////////////////////
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
class hScr extends Sprite {
private var _width:uint = 16;
private var _height:uint =16;
private var track:Sprite;
private var thumb:Sprite;
private var maxWidth:uint;
private var clickPos:Number;
private var _enabled:Boolean = true;
private var txt:TextField;
public function hScr() {
init();
}
public function setTF(tf:TextField):void{
txt = tf;
txt.addEventListener(Event.SCROLL,onScroll);
tf.parent.addChild(this);
resize();
onScroll();
}
//キー入力イベント
private function onScroll(e:Event=null):void{
resize();
var n:Number = (txt.scrollH / txt.maxScrollH);
var pos:Number = maxWidth*n;
if (txt.scrollH == 1) pos = 0;
if (txt.maxScrollH == txt.scrollH) pos = maxWidth;
thumb.x = pos;
}
public function onChange(e:Event=null):void{
resize();
}
private function resize():void{
this.y = txt.y +txt.height +1;
this.x = txt.x;
this.alpha = 0.5;
_width = txt.width +1;
if(txt.textWidth < txt.width){//スクロールバー非表示
txt.parent.removeChild(this);
return;
}
var n:Number = txt.width / txt.textWidth;
var thumbWidth:uint = _width*n;
maxWidth = _width - thumbWidth;
createTrack(_width,_height,0xaaaaaa);
createThumb(thumbWidth,_height,0x888888);
txt.parent.addChild(this);//スクロールバー表示
}
private function init():void {
track = new Sprite();
thumb = new Sprite();
addChild(track);
addChild(thumb);
enabled = true;
thumb.mouseChildren = false;
}
private function press(evt:MouseEvent=null):void {
thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
//track.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, releaseOutside, false, 0, true);
stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
clickPos = thumb.mouseX;
//clickPos = track.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag, false, 0, true);
}
private function release(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
//track.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function releaseOutside(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function leave(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function drag(evt:MouseEvent):void {
var position:Number = stage.mouseX - clickPos;
if (position < 0) position = 0;
if (position > maxWidth) position = maxWidth;
thumb.x = position;
txt.scrollH = Math.round(txt.maxScrollH*(position/maxWidth));
evt.updateAfterEvent();
}
private function click(evt:MouseEvent):void {
var position:Number = track.mouseX - (thumb.width/2);
if (position < 0) position = 0;
if (position > maxWidth) position = maxWidth;
thumb.x = position;
txt.scrollH = Math.round(txt.maxScrollH*(position/maxWidth));
evt.updateAfterEvent();
press();
}
public function get enabled():Boolean {
return _enabled;
}
public function set enabled(param:Boolean):void {
_enabled = param;
thumb.buttonMode = _enabled;
thumb.mouseEnabled = _enabled;
thumb.useHandCursor = _enabled;
track.mouseEnabled = _enabled;
if (_enabled) {
thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
track.addEventListener(MouseEvent.MOUSE_DOWN, click, false, 0, true);
} else {
thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
track.removeEventListener(MouseEvent.MOUSE_DOWN, click);
}
}
//スクロール表示位置
private function createThumb(w:uint, h:uint,c:uint):void {
with(thumb){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
//スクロール範囲
private function createTrack(w:uint, h:uint,c:uint):void {
with(track){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
}
////////////////////////////////////////////////////////////////////////////////
// ScrollBarクラス
////////////////////////////////////////////////////////////////////////////////
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
class ScrollBar extends Sprite {
private var _width:uint = 16;
private var _height:uint;
private var track:Sprite;
private var thumb:Sprite;
private var maxHeight:uint;
// private var target:DisplayObject;
// private var rect:DisplayObject;
private var clickPos:Number;
private var _enabled:Boolean = true;
private var txt:TextField;
public function ScrollBar() {
init();
}
public function setTF(tf:TextField):void{
txt = tf;
txt.addEventListener(KeyboardEvent.KEY_DOWN,onKey);
tf.parent.addChild(this);
onKey();
}
//キー入力イベント
private function onKey(e:KeyboardEvent=null):void{
resize();
var pos:Number = maxHeight*(txt.scrollV / txt.maxScrollV);
if (txt.scrollV == 1) pos = 0;
if (txt.maxScrollV == txt.scrollV) pos = maxHeight;
thumb.y = pos;
e.updateAfterEvent();
}
public function onChange(e:Event=null):void{
resize();
}
private function resize():void{
this.x = txt.x +txt.width -_width +1;
this.y = txt.y;
this.alpha = 0.5;
_height = txt.height;
if(txt.textHeight < txt.height){//スクロールバー非表示
txt.parent.removeChild(this);
return;
}
var n:Number = txt.height / txt.textHeight;
var thumbHeight:uint = _height*n;
maxHeight = _height - thumbHeight;
createTrack(_width,_height,0xaaaaaa);
createThumb(_width,thumbHeight,0x888888);
txt.parent.addChild(this);//スクロールバー表示
}
private function init():void {
track = new Sprite();
thumb = new Sprite();
addChild(track);
addChild(thumb);
enabled = true;
thumb.mouseChildren = false;
}
private function press(evt:MouseEvent=null):void {
thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
//track.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, releaseOutside, false, 0, true);
stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
clickPos = thumb.mouseY;
//clickPos = track.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag, false, 0, true);
}
private function release(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
//track.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function releaseOutside(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function leave(evt:MouseEvent):void {
thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
stage.removeEventListener(Event.MOUSE_LEAVE, leave);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
}
private function drag(evt:MouseEvent):void {
var position:Number = stage.mouseY - clickPos;
if (position < 0) position = 0;
if (position > maxHeight) position = maxHeight;
thumb.y = position;
txt.scrollV = Math.round(txt.maxScrollV*(position/maxHeight));
evt.updateAfterEvent();
}
private function click(evt:MouseEvent):void {
var position:Number = track.mouseY - (thumb.height/2);
if (position < 0) position = 0;
if (position > maxHeight) position = maxHeight;
thumb.y = position;
txt.scrollV = Math.round(txt.maxScrollV*(position/maxHeight));
evt.updateAfterEvent();
press();
}
public function get enabled():Boolean {
return _enabled;
}
public function set enabled(param:Boolean):void {
_enabled = param;
thumb.buttonMode = _enabled;
thumb.mouseEnabled = _enabled;
thumb.useHandCursor = _enabled;
track.mouseEnabled = _enabled;
if (_enabled) {
//_up();
//thumb.addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
//thumb.addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
track.addEventListener(MouseEvent.MOUSE_DOWN, click, false, 0, true);
} else {
//_off();
//thumb.removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
//thumb.removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
track.removeEventListener(MouseEvent.MOUSE_DOWN, click);
}
}
//スクロール表示位置
private function createThumb(w:uint, h:uint,c:uint):void {
with(thumb){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
//スクロール範囲
private function createTrack(w:uint, h:uint,c:uint):void {
with(track){
graphics.clear();
graphics.beginFill(c);
graphics.drawRect(0,0, w-1, h);
graphics.endFill();
}
}
}