[AS3.0]AS3版スクロールバー修正
October 15, 2008 8:19 PM2
以前アップしたエントリーのマウスホイールまわりの動きが怪しかったので改善しました。
このライブラリが不具合の原因でした。
pixelbreaker : AS3.0 MouseWheel on Mac OS X
Sparkでみつけたこっちのライブラリのほうが全然良かったです。制作者さま多謝!
HigeWheel - Spark project
このライブラリが不具合の原因でした。
Sparkでみつけたこっちのライブラリのほうが全然良かったです。制作者さま多謝!
HigeWheel - Spark project
package
{
import flash.display.DisplayObjectContainer;
import org.libspark.utils.ui.HIGEWheel;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class ScrollBar extends MovieClip
{
private var yMin:Number;
private var yMax:Number;
private var yOffset:Number;
private var friction:Number = 0.2;
public function ScrollBar()
{
HIGEWheel.initialize(stage);
}
public function start(initMode:Boolean=false, resizeTH:Boolean=false):void
{
HIGEWheel.initialize(stage);
if (initMode == true)
{
initMove();
}
else
{
setup();
}
if (resizeTH == true)
{
var scrollBox:MovieClip = parent as MovieClip;
var mPc:Number = scrollBox.masker.height / scrollBox.content.height;
thumb.height = track.height * mPc;
}
yMin = 0;
yMax = track.height - thumb.height;
}
public function initMove():void
{
thumb.addEventListener(Event.ENTER_FRAME, xInitMoveHandler);
}
private function setup():void
{
var sb:MovieClip = this.parent as MovieClip;
thumb.buttonMode = true;
thumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbDown);
thumb.addEventListener(MouseEvent.MOUSE_UP, thumUp);
stage.addEventListener(MouseEvent.MOUSE_UP, thumUp);
track.addEventListener(MouseEvent.MOUSE_DOWN, trackDown);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
}
private function thumbDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, thumbMove);
yOffset = mouseY - thumb.y;
}
private function thumUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMove);
thumb.removeEventListener(Event.ENTER_FRAME, trackEnterframeHandler);
thumb.stopDrag();
}
private function thumbMove(e:MouseEvent):void
{
thumb.y = mouseY - yOffset;
mouseLink();
e.updateAfterEvent();
}
private function trackDown(e:MouseEvent):void
{
thumb.addEventListener(Event.ENTER_FRAME, trackEnterframeHandler);
}
private function trackEnterframeHandler(e:Event):void
{
var dis:Number = mouseY - thumb.y;
thumb.y += dis * friction;
mouseLink();
if (mouseY > yMax)
{
var dis2:Number = yMax - thumb.y;
if (dis2 <= 0.5)
{
thumb.y = yMax;
}
thumb.y += dis2 * friction;
}
scrollEventCall();
}
private function mouseWheelHandler(e:MouseEvent):void
{
thumb.y = thumb.y - e.delta * 2;
mouseLink();
}
private function mouseLink():void
{
if (thumb.y <= yMin)
{
thumb.y = yMin;
}
if (thumb.y >= yMax)
{
thumb.y = yMax;
}
scrollEventCall();
}
private function scrollEventCall():void
{
var v:Number = thumb.y / yMax;
dispatchEvent(new ScrollBarEvent(ScrollBarEvent.VALUE_CHANGED, v));
}
private function xInitMoveHandler(e:Event):void
{
var dis:Number = yMax - thumb.y;
if (dis <= 0.5)
{
thumb.y = yMax;
thumb.removeEventListener(Event.ENTER_FRAME, xInitMoveHandler);
thumb.addEventListener(Event.ENTER_FRAME, xInitRemoveHandler);
}
thumb.y += dis * friction;
scrollEventCall();
}
private function xInitRemoveHandler(e:Event):void
{
var dis:Number = yMin - thumb.y;
thumb.y += dis * friction;
scrollEventCall();
if (thumb.y <= 1)
{
thumb.y = yMin;
thumb.removeEventListener(Event.ENTER_FRAME, xInitRemoveHandler);
setup();
}
}
}
}
package
{
import caurina.transitions.Tweener;
import flash.display.MovieClip;
public class ScrollBox extends MovieClip
{
public function ScrollBox()
{
if (masker.height > content.height)
{
sb.visible = false;
}
sb.addEventListener(ScrollBarEvent.VALUE_CHANGED, sbChange);
}
private function sbChange(e:ScrollBarEvent):void
{
Tweener.addTween(content, { y:( -e.v * (content.height - masker.height)), time:1 } );
}
}
}
swfobject1.5ではなく、2を使っていることに注意です。
HTML側の記述はこんな感じ。headタグ内のswfobject読み込み部分は省略。
nobu
HIGEWheel を使って頂いてありがとうございます :-)
November 2, 2008 3:28 AM
ojiboss
AS3版スクロールバーのscrollbar.flaがダウンロードしようと
リンクをクリックするとNot Foundとなります。
AS3からの初心者で勉強させていただいています。
ダウンロードできるようにしていただけると助かります。
よろしくお願いします。
November 20, 2008 9:47 AM