zoukankan      html  css  js  c++  java
  • TransformAroundPointPlugin

    TransformAroundPointPlugin

    图片缩放后位置的设置

    package {
        
        import com.greensock.TweenLite;
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
        import flash.geom.Rectangle;
        import com.greensock.plugins.TransformAroundCenterPlugin;
        import com.greensock.plugins.TransformAroundPointPlugin;
        import com.greensock.plugins.TweenPlugin;
        import com.greensock.TweenMax;
        
        /**
         * 
         * @author whk
         */
        public class Deom extends MovieClip {
            private var imageW:Number ;
            private var imageH:Number ;
            private var stageW:Number;
            private var stageH:Number;
            private var imageDrageRect:Rectangle;
            private var scaleNum:Number = 1;
            
            public function Deom() {
                if (stage)
                    init();
                else
                    addEventListener(Event.ADDED_TO_STAGE, init);
            }
            
            private function init(e:Event =null):void 
            {
                removeEventListener(Event.ADDED_TO_STAGE, init);
                
                //注册Tween
                TweenPlugin.activate([TransformAroundPointPlugin]);
                
                imageW = stage.stageWidth;
                imageH = stage.stageHeight;
                btn_enlarge.addEventListener(MouseEvent.CLICK, onEnlargeImage);
                btn_narrow.addEventListener(MouseEvent.CLICK, onNarrowImage);
                btn_reset.addEventListener(MouseEvent.CLICK, onResetImage);
            }
            
            /**
             * 还原图片大小位置
             * @param    e
             */
            private function onResetImage(e:MouseEvent):void {
                image.stopDrag();
                image.removeEventListener(MouseEvent.MOUSE_DOWN, onImageDrage);
                stage.removeEventListener(MouseEvent.MOUSE_UP, onStopDrage);
                
                image.x = image.y = 0;
                image.scaleX = image.scaleY = 1;
                scaleNum = 1;
            }
            
            /**
             * 按比例放大图片
             * @param    e
             */
            private function onEnlargeImage(e:MouseEvent):void {
                if (scaleNum < 2) {
                    btn_narrow.visible = true;
                    scaleNum += 0.2;
                    //根据点位置缩放图片
                    TweenMax.to(image, .2, {transformAroundPoint: {point: new Point(image.x, image.y), scaleX: scaleNum, scaleY: scaleNum}});
                }
                if (scaleNum >= 2)
                    btn_enlarge.visible = false;
                
                setDrageRect(scaleNum);
            }
            
            /**
             * 按比例缩小图片
             * @param    e
             */
            private function onNarrowImage(e:MouseEvent):void {
                if (scaleNum > 1) {
                    var a:Number = int(imageW * (scaleNum - 1));
                    var b:Number = int(imageH * (scaleNum - 1));
                    
                    btn_enlarge.visible = true;
                    scaleNum -= 0.2;
                    var imageX:Number = Math.abs(int(image.x));
                    var imageY:Number = Math.abs(int(image.y));
                    
                    //当图片缩小时,保持图片始终位于舞台
                    addEventListener(Event.ENTER_FRAME, checkTrans);
                    TweenMax.to(image, .2, {transformAroundPoint: {point: new Point(imageX, imageY), scaleX: scaleNum, scaleY: scaleNum}, onComplete: function() {
                            removeEventListener(Event.ENTER_FRAME, checkTrans);
                            checkTrans();
                        }});
                    
                }
                if (scaleNum <= 1) {
                    btn_narrow.visible = false;
                }
                setDrageRect(scaleNum);
            }
            
            /**
             * 检测图片当前的位置,若超出舞台则相应移动会舞台
             * @param    e
             */
            private function checkTrans(e:Event = null):void {
                if (image.x > 0 || image.y > 0) {
                    removeEventListener(Event.ENTER_FRAME, checkTrans);
                    TweenLite.to(image, .2, {x: 0, y: 0});
                }
                if (((imageW * scaleNum + image.x) < imageW)) {
                    removeEventListener(Event.ENTER_FRAME, checkTrans);
                    TweenLite.to(image, .2, {x: image.x + imageW - (imageW * scaleNum + image.x)});
                }
                if (((imageH * scaleNum + image.y) < imageH)) {
                    removeEventListener(Event.ENTER_FRAME, checkTrans);
                    TweenLite.to(image, .2, {y: image.y + imageH - (imageH * scaleNum + image.y)});
                }
            }
            
            /**
             * 设置可拖动范围
             * @param    _scaleNum 放大倍数
             */
            private function setDrageRect(_scaleNum:Number):void {
                var disX:Number = imageW - imageW * _scaleNum;
                var disY:Number = imageH - imageH * _scaleNum;
                imageDrageRect = new Rectangle(disX, disY, imageW * _scaleNum - imageW, imageH * _scaleNum - imageH);
                image.addEventListener(MouseEvent.MOUSE_DOWN, onImageDrage);
                stage.addEventListener(MouseEvent.MOUSE_UP, onStopDrage);
            }
            
            private function onStopDrage(e:MouseEvent):void {
                image.stopDrag();
            }
            
            private function onImageDrage(e:MouseEvent):void {
                image.startDrag(false, imageDrageRect);
            }
        }
    
    }

    http://115.com/file/anay5ck0#
    Zoom.rar

  • 相关阅读:
    南阳33(蛇形填数)规律题;
    南阳241(字母统计)
    南阳57(6174问题)
    android图形基础知识
    Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用
    debug连线指令
    Qt之信号连接,你Out了吗?
    hdu-4607-Park Visit
    MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)
    如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库
  • 原文地址:https://www.cnblogs.com/iwhk/p/2689063.html
Copyright © 2011-2022 走看看