package com.fylibs.components.effects
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent; /**
* 用于拖动对象时的缓动效果
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-12-11 下午3:22:27
*
*/
public class DragMove
{
private var _direction:String = "horizontal";
private var _ratio:Number = 0.900000;
/**
* 按下的坐标(当horizontal时为x坐标,当vertical时为y坐标)
*/
private var _downCoor:Number;
/**
* 移动的坐标(当horizontal时为x坐标,当vertical时为y坐标)
*/
private var _moveCoor:Number;
/**
* 缓动偏移量
*/
private var _offset:Number;
/**
* 坐标标记(当horizontal时为x,当vertical时为y)
*/
private var _coor:String = "mouseX";
/**
* 标记是否按下状态
*/
private var _isDown:Boolean;
private var _target:DisplayObject;
private var _max:Number;
private var _min:Number;
/**
* 拖拽缓动
* @param target 需要拖拽的对象
* @param max 拖拽对象的最大坐标值
* @param min 拖拽对象的最小坐标值
* @param direction 缓动方向
*/
public function DragMove(target:DisplayObject,max:Number,min:Number,direction:String="horizontal")
{
_max = max;
_min = min;
_direction = direction;
_direction == "horizontal"?_coor = "mouseX":_coor = "mouseY";
_target = target;
_target.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
}
/**
* 刷新
* @param max 拖拽对象的最大坐标值
* @param min 拖拽对象的最小坐标值
*/
public function refresh(max:Number,min:Number):void
{
_max = max;
_min = min;
}
private function onDown(e:MouseEvent):void
{
_isDown = true;
_downCoor = _target[_coor];
_target.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
_target.stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
_target.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
_offset = _offset * _ratio;
_target.x = _target.x + _offset;
if (_target.x < _min){
_target.x = _min ;
}
if (_target.x > _max){
_target.x = _max;
}
if(Math.abs(_offset)<0.001){
_offset+=0.1;
_target.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
}
}
private function onMove(e:MouseEvent):void
{
if (_isDown) {
_moveCoor = _target[_coor];
_offset = _moveCoor - _downCoor
_offset = _offset / 20;
}
}
private function onUp(e:MouseEvent):void
{
_isDown = false;
_target.stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
_target.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); }
/**
* 移动方向,horizontal横向,vertical纵向
*/
public function get direction():String
{
return _direction;
} /**
* @private
*/
public function set direction(value:String):void
{
_direction = value;
} /**
* 缓动系数
*/
public function get ratio():Number
{
return _ratio;
} /**
* @private
*/
public function set ratio(value:Number):void
{
_ratio = value;
} }
}

[ActionScript 3.0] AS3 用于拖动对象时跟随鼠标的缓动效果的更多相关文章

  1. [ActionScript 3.0] AS3 用于拖动对象时一次一页的缓动

    package com.fylibs.components.effects{ import com.tweener.transitions.Tweener; import flash.display. ...

  2. WPF中ListBox滚动时的缓动效果

    原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时 ...

  3. [ActionScript 3.0] as3处理xml的功能和遍历节点

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  4. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  5. [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

    简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...

  6. [ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠

    import flash.geom.Rectangle; import flash.display.MovieClip; import flash.display.Sprite; var arr:Ar ...

  7. [ActionScript 3.0] AS3.0 对象在矩形范围随机运动

    package com.views { import flash.display.Bitmap; import flash.display.MovieClip; import flash.displa ...

  8. [ActionScript 3.0] AS3.0 Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain

    实际应用中, Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain,需要择情况而定. 1.如果在本地将项目位置添加到flashplayer受信任位置(上一篇文章所述) ...

  9. [ActionScript 3.0] as3.0加载as2.0的swf时获取as2.0的实际舞台尺寸

    var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler) ...

随机推荐

  1. SET ROWCOUNT,SET NOCOUNT

    SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ...

  2. 如何在Windows 下安装Python

    1.  安装源程序的选择 官网:https://www.python.org/downloads/ 选择版本下载,根据实际计算机位数(64位),下载的为: Python-2.7.10.amd64.ms ...

  3. maxscript, 数组和字符串下标是从1开始的

    maxscript中数组和字符串下标是从1开始的.

  4. 【转】POP3、SMTP和IMAP之间的区别和联系

    POP3 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第 ...

  5. jmeter使用IP欺骗压力测试

    最近在使用jmeter进行压力测试时需要使用类似于loadrunner的IP欺骗功能,经问津度娘无果后决定再次耐心研究jmeter官方文 档,终于发现在jmeter2.5以上的版本有此功能的实现,由于 ...

  6. 【性能诊断】六、并发场景的性能分析(windbg案例,大量的内部异常造成CPU飙升)

    在做产品的某个核心模块的性能优化时,发现压到100并发时应用服务器的CPU就飙升至90%以上,50并发以后TPS就基本定格在一个数值上.使用性能监视器收集应用服务器的数据,发现每秒的.NET CLR ...

  7. [spring] java.lang.reflect.MalformedParameterizedTypeException

    spring中加入dubbo后报java.lang.reflect.MalformedParameterizedTypeException 因为dubbo 2.5.3 它引用的是spring 2.5. ...

  8. Learning Puppet — Resources and the RAL

    Learning Puppet — Resources and the RAL Welcome to Learning Puppet! This series covers the basics of ...

  9. MATLAB GUI对话框设计(转载)

    原文地址:http://blog.csdn.net/shuziluoji1988/article/details/8532982 1.公共对话框: 公共对话框是利用windows资源的对话框,包括文件 ...

  10. android显示证书sha1

    创建证书可以用命令 keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 或者andro ...