ホイールスクロールにイージング ホイールイベントが受け取れるのはwinの人だけ! HaraMakoto forked:6favorite:4lines:154license : MIT License modified : 2009-05-30 20:22:27 Embed Tweet package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; /** * ホイールイベントが受け取れるのはwinの人だけ! */ [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")] public class WheelSmooth_Simple extends Sprite { //パーツMC private var scrHandle:MovieClip = new MovieClip(); private var scrBar:MovieClip = new MovieClip(); private var baseMC:MovieClip = new MovieClip(); private var targetMC:MovieClip = new MovieClip(); private var targetScaleMC:MovieClip = new MovieClip(); //スクロールコントローラ private var srcCon:ScrollController; //debug private var tft:TextField = new TextField(); //絵の配列 private var pArray:Array = [ {x:152.76,y:112.106},{x:181.33,y:92.45},{x:203.553,y:60.126}, {x:204.562,y:29.823},{x:197.492,y:13.662},{x: 229.814,y:16.692},{x:266.901,y:47.624}, {x:274.26,y:95.48},{x:253.453,y:135.211},{x:222.744,y:156.085},{x:185.37,y:172.248}, {x:167.085,y:175.322},{x:172.823,y:205.775},{x: 165.168,y:204.571},{x:154.911,y:177.179}, {x:132.845,y:175.278},{x:106.671,y:176.394},{x:100.98,y:212.462},{x:89.868,y:209.867}, {x:94.461,y:178.308},{x:78.3,y:168.208},{x: 53.047,y:159.116},{x:38.098,y:192.677}, {x:28.57,y:186.396},{x:46.279,y:152.97},{x:23.548,y:130.25},{x:0.522,y:81.338}, {x:9.613,y:33.864},{x:35.875,y:7.601},{x:58.098,y:0.53},{x: 77.517,y:8.128},{x:76.28,y:15.682}, {x:61.128,y:10.631},{x:40.405,y:21.79},{x:28.805,y:56.086},{x:36.886,y:82.349},{x:48.353,y:99.127}, {x:67.99,y:111.991},{x:75.941,y:96.996},{x: 85.783,y:102.693},{x:79.31,y:112.651},{x:101.728,y:120.339}, {x:104.021,y:102.986},{x:115.737,y:104.527},{x:113.77,y:120.131},{x:137.896,y:116.692},{x:137.531,y:98.177}, {x: 147.633,y:94.64} ]; public function WheelSmooth_Simple() { //パーツ構築 constructView(); //コントローラ作成 srcCon = new ScrollController(scrHandle,scrBar,targetMC,baseMC); srcCon.errTxt = tft; srcCon.targetScaleMC = targetScaleMC; addEventListener(Event.ADDED_TO_STAGE, addStageHandler); } private function addStageHandler(e:Event):void { stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler); } private function wheelHandler(e:MouseEvent):void { srcCon.getWheel(e.delta); tft.text = String(e.delta); } //シェイプ作成、配置 private function constructView():void { scrHandle.graphics.beginFill(0x333333) scrHandle.graphics.drawRect(0,0,50,30); //ハンドル scrHandle.graphics.endFill(); scrBar.graphics.beginFill(0xFFFFFF); scrBar.graphics.drawRect(-1,-1,52,200); //バー scrBar.graphics.endFill(); //表示領域 baseMC.graphics.beginFill(0x333333); baseMC.graphics.drawRect(0,0,300,200); baseMC.graphics.endFill(); //ターゲット targetMC.graphics.beginFill(0x66FF66); targetMC.graphics.drawRect(0,0,300,350); targetMC.graphics.endFill(); var imgMC:Sprite = new Sprite(); var num:int = pArray.length; imgMC.graphics.lineStyle(10,0xFFFFFF); imgMC.graphics.moveTo(pArray[0].x, pArray[0].y); for(var i:int=1; i<num; i++) { imgMC.graphics.lineTo(pArray[i].x, pArray[i].y); } imgMC.graphics.lineTo(pArray[0].x, pArray[0].y); imgMC.graphics.endFill(); imgMC.rotation = -90; imgMC.y = 300; imgMC.x = 50; targetMC.addChild(imgMC); scrHandle.x = 400; scrHandle.y = 50; scrBar.x = 400; scrBar.y = 50; baseMC.x = 50; baseMC.y = 50; targetMC.x = 50; targetMC.y = 50; addChild(scrBar); addChild(scrHandle); addChild(targetMC); addChild(baseMC); addChild(tft); targetMC.mask = baseMC; /*targetScaleMC.graphics.beginFill(0xFCFCFC); targetScaleMC.graphics.drawCircle(0,0,100); targetScaleMC.graphics.endFill(); targetScaleMC.x = 200; targetScaleMC.y = 200; addChild(targetScaleMC); */ tft.textColor = 0xFFFFFF; tft.autoSize = TextFieldAutoSize.LEFT; } } } import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.events.Event; import caurina.transitions.Tweener; import flash.text.TextField; class ScrollController extends Sprite { //param private var yMax:Number; //ハンドルのy最大 private var yMin:Number; //ハンドルのy最小 private var targetMC:MovieClip; //操作対象 private var targetBase:MovieClip; //土台 public var paramY:Number = 0; private var minVol:Number = 0.3; private var maxVol:Number = 1.5; public var targetScaleMC:MovieClip; //スケール操作対象 //コントローラ private var _handle:MovieClip; private var _bar:MovieClip; //表示オブジェクト private var left:MovieClip; private var right:MovieClip; //param private var defW:Number; private var defH:Number; private var pastChangeVol:Number; //debug public var errTxt:TextField; public function ScrollController(han:MovieClip,bar:MovieClip, tar:MovieClip, base:MovieClip) { _handle = han; _bar = bar; targetMC = tar; targetBase = base; yMin = _bar.y; yMax = _bar.y + _bar.height - _handle.height; left = new MovieClip(); right = new MovieClip(); left.addEventListener(MouseEvent.CLICK, leftClick); right.addEventListener(MouseEvent.CLICK, rightClick); } private function leftClick(e:MouseEvent):void{/*reSize(-0.1);*/getWheel(1.5);} private function rightClick(e:MouseEvent):void{/*reSize(0.1);*/getWheel(-1.5);} /** * マウスホイール受け取ってのイベント */ public function getWheel(de:Number):void { var targetY:Number; var wSpeed:Number = 50; paramY = _handle.y; //現在のハンドルy targetY = -de * wSpeed + paramY; if(targetY >= yMax) targetY = yMax; if(targetY <= yMin) targetY = yMin;//debug errTxt.text = String(targetY); //変化量によって移動時間を調節する var seekTime:Number = 1; //移動させる if(Tweener.isTweening(_handle))Tweener.removeTweens(_handle); if(Tweener.isTweening(targetMC))Tweener.removeTweens(targetMC); if(Tweener.isTweening(targetScaleMC))Tweener.removeTweens(targetScaleMC); Tweener.addTween( _handle, { y:targetY, time:seekTime, transition:"easeOutQuint"/*, onUpdate:_update*/ }); Tweener.addTween( targetMC, { y:culcBaseY( targetY ), time:seekTime, transition:"easeOutQuint" }); //スケールさせる //Tweener.addTween( targetScaleMC, { scaleX:culcVol( targetY ), scaleY:culcVol( targetY ), time:seekTime, transition:"easeOutQuint" }); } /** * targetYより、ベースの移動先を算出します。 */ private function culcBaseY(tY:Number):Number { var targetBaseY:Number = targetBase.y - (targetMC.height-targetBase.height) * ( ( tY - yMin ) / (yMax-yMin)); return targetBaseY; } /** * targetYより、サイズなど反映させたい場合 */ private function culcVol(tY:Number):Number { var targetVol:Number = minVol + (maxVol - minVol) * ( ( tY - yMin ) / (yMax-yMin)); return targetVol; } } Code Fullscreen Preview Fullscreen DOS dizgid chimanaco kakyoin : ホイールスクロール ホイールスクロール MovieClip Tweener.removeTweens Tweener.isTweening mask rotation Tweener.addTween addChild height time addEventListener textColor Event.ADDED_TO_STAGE TextField autoSize text length String Array Event int sort new page view favorite forked pv280 forked from: ホイールスクロールにイージング hacker_r1ekf_by forked:0 favorite:0lines:154 (diff:1) pv216 forked from: ホイールスクロールにイージング hacker_v4337s3u forked:0 favorite:0lines:154 (diff:1) pv556 forked from: ホイールスクロールにイージング uepon24 forked:0 favorite:0lines:154 (diff:1) pv0 forked from: ホイールスクロールにイージング hacker_xg4r0uhf forked:0 favorite:0lines:154 (diff:1) pv1579 拡大縮小にした forked from: ホイールスクロール.. HaraMakoto forked:2 favorite:7lines:178 (diff:78) tag: ホイールスクロール 拡大縮小 pv1326 ドラッグつけた forked from: ホイールスクロール.. HaraMakoto forked:3 favorite:5lines:177 (diff:54) tag: ScrollBar