[AS3]放大縮小的商品詳細地圖

主要是計算圖片移動的範圍
還有SCROLL BAR的控制

[AS3DEMO]放大縮小的商品詳細地圖

本來又做防鋸齒的動作
不過把資料倒到BitmapData後再加回來,Scale的資料就跑掉了
也就是他會以放大後的大小去計算
這樣一下子就超過BitmapData限制的2880PX…

[MAIN.as]

package{
	
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.utils.Timer;
	import flash.geom.Matrix;
	import flash.net.navigateToURL;
	import flash.filters.*;
	import flash.utils.getDefinitionByName; //引入getDefinitionByName方法;

	import caurina.transitions.Tweener;

	public class Main extends Sprite {
		var mod:ModelLocator = ModelLocator.getInstance(); 
		
		var item_XML:String;
		var itemLoader:URLLoader = new URLLoader;
		var itemList:XMLList;
		var _mainIMGmask:MovieClip;
		
		var imgLoader:Loader;
		var mainScale:Number;
		var mainScaleAt:Number;
		
		var _BLnav:BLnav = new BLnav();
		var mainPic:MovieClip;
		var scaleMax:Number = 2;
		var mainPicOldWidth:Number;
		var mainPicOldHeight:Number;
		
		public function Main() {	
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(e:Event) {
			mod.rooturl = this.loaderInfo.url.substring(0, this.loaderInfo.url.indexOf("flash") );
			item_XML = "itemMap/item.xml";
			itemLoader.load(new URLRequest(item_XML));
			itemLoader.addEventListener(Event.COMPLETE, itemLoadComplete);
			
			mod.addEventListener("changeMainIMG", changeMainIMG);
			mod.addEventListener("navScroll", navScroll);
			mod.addEventListener("bigDown", function (e:CustomEvent) { mainScaleAt += 0.1; scaleMainIMG(); } );
			mod.addEventListener("litDown", function (e:CustomEvent) { mainScaleAt -= 0.1; scaleMainIMG(); } );
		}
		
		private function itemLoadComplete(e:Event) {
			mod.item_XML = new XML(itemLoader.data);
			itemList = mod.item_XML.item;
			mod.dispatchEvent( new CustomEvent("changeMainIMG",0));
		}
		
		private function changeMainIMG(e:CustomEvent) {
			imgLoader = new Loader();
			imgLoader.load(new URLRequest(itemList[e.data].img_path));
			imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, mainImgLoaderComplete );
		}
		
		private function mainImgLoaderComplete(e:Event) {
			if (mainPic) removeChild(mainPic);
			mainPic = new MovieClip();
			var _bit:Bitmap = Bitmap(e.target.content);
			
			_mainIMGmask = new MovieClip();
			_mainIMGmask.graphics.beginFill(0xFF0000);
			_mainIMGmask.graphics.drawRect(0, 0, 550, 400);
			_mainIMGmask.graphics.endFill();
			addChild(_mainIMGmask);
			
			mainPicOldWidth = _bit.width;
			mainPicOldHeight = _bit.height;
			mainScale = Math.floor(500 / _bit.width * 100) / 100;
			mainScaleAt = Math.floor(500 / _bit.width * 100) / 100;
			addChild(mainPic);
			mainPic.scaleX = mainPic.scaleY = mainScale;
			mainPic.addChild(_bit);
			mainPic.mask = _mainIMGmask;
			mainPic.doubleClickEnabled=true;
			mainPic.addEventListener(MouseEvent.MOUSE_MOVE, function (e:MouseEvent) { mainPicMove(); } );
			mainPic.addEventListener(MouseEvent.DOUBLE_CLICK, function (e:MouseEvent) { mod.dispatchEvent( new CustomEvent("bigDown")); } );
			
			_BLnav.x = 175;
			_BLnav.y = 390;
			_BLnav.alpha = 0;
			addChild(_BLnav);
			Tweener.addTween(_BLnav, { y:360, alpha:1, time:0.3, transition:"easeOutQuad" } );
			Tweener.addTween(_BLnav.tab, { x:0, time:0.3, transition:"easeOutQuad" } );
		}
		
		private function mainPicMove() {
			Tweener.addTween(mainPic, { y:(400 - mainPicOldHeight * mainScaleAt) * mouseY / 400,
										x:(550 - mainPicOldWidth * mainScaleAt) * mouseX / 550,
										time:0.5, 
										transition:"easeOutQuad" 
										} );
		}
		
		private function scaleMainIMG(scroll:Boolean = false) {
			if (mainScaleAt > scaleMax) {
				mainScaleAt = scaleMax;
			}else if(mainScaleAt

[BLnav.as]scrollBar的AS

package {
	
	import flash.events.*;
	import flash.display.*;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.utils.Timer;
	import flash.geom.Matrix;
	import flash.net.navigateToURL;
		
	import caurina.transitions.Tweener;
	import caurina.transitions.properties.ColorShortcuts;
	ColorShortcuts.init()
	
	import flash.utils.getDefinitionByName; //引入getDefinitionByName方法;

	public class BLnav extends MovieClip {
		var mod:ModelLocator = ModelLocator.getInstance();  
		
		public function BLnav() {
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(e:Event) {
			tab.buttonMode = true;
			btn_big.addEventListener(MouseEvent.MOUSE_DOWN, bigDown);
			btn_lit.addEventListener(MouseEvent.MOUSE_DOWN, litDown);
			tab.addEventListener(MouseEvent.MOUSE_DOWN, tabDown);
			tab.addEventListener(MouseEvent.MOUSE_UP, tabUP);
			tab.addEventListener(MouseEvent.ROLL_OUT, tabUP);
			tab.addEventListener(MouseEvent.MOUSE_OVER, tabOver);
			tab.addEventListener(MouseEvent.MOUSE_OUT, tabOut);
		}
		
		private function bigDown(e:MouseEvent) {
			mod.dispatchEvent( new CustomEvent("bigDown"));
		}
		private function litDown(e:MouseEvent) {
			mod.dispatchEvent( new CustomEvent("litDown"));
		}
		private function tabDown(e:MouseEvent) {
			tab.startDrag(false, new flash.geom.Rectangle(0, 2, 166, 2) );
			tab.addEventListener(MouseEvent.MOUSE_MOVE, dispatchNavScroll );
		}
		private function tabUP(e:MouseEvent) {
			tab.stopDrag();
			tab.removeEventListener(MouseEvent.MOUSE_MOVE, dispatchNavScroll);
		}
		private function tabOver(e:MouseEvent) {
			Tweener.addTween(tab, { _brightness: 0.8, time:0.2, transition:"easeOutBack" } );
		}		
		private function tabOut(e:MouseEvent) {
			Tweener.addTween(tab, { _brightness:0, time:0.2, transition:"easeOutBack" } );
		}
		
		private function dispatchNavScroll(e:MouseEvent) {
			mod.dispatchEvent( new CustomEvent("navScroll"));
		}
	}
}

在〈[AS3]放大縮小的商品詳細地圖〉中有 2 則留言

留言功能已關閉。