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. MySQL中Group By,distinct使用注意事项

    mysql> select * from test; +----+-------+------+-------+ | id | name | age | class | +----+------ ...

  2. Innodb 表修复(转)

    摘要:      突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了.innodb表损坏不能通过repair table 等修复myisam的命令操作.现在记录下 ...

  3. MySQL explain key_len 大小的计算

    总结: 变长字段需要额外的2个字节,固定长度字段不需要额外的字节.而null都需要1个字节的额外空间,所以以前有个说法:索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存 ...

  4. My second "last working day"

    时间真快,转眼硕士毕业已经快8年了. 今天是我的第二个last working day.也是我即将结束在外企工作的节点. 说来,毕业的时候,找工作,在确定了最后要去的单位之前,手头已经拿过了10家单位 ...

  5. SIM卡里的文件

    SIM卡里的所有文件按树来组织:主文件MF(Master File)——每一块SIM卡只有一个唯一的主文件, 其他所有文件都是它的子孙, 主文件只有文件头,里面存放着整个SIM卡的控制和管理信息专用文 ...

  6. RDO部署openstack(3)

    目前OpenStackNeutron框架支持的网络服务有:LoadBalancing as a Service,VPNas a Service,Firewallas a Service. 1. 安装和 ...

  7. 高性能MySQL --- 读书笔记(1) - 2016/8/2

    此书不但帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开发高性能MySQL应用的途径.全书包括14章,内容覆盖MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优. ...

  8. CentOS 7.0 安装中文输入法

    这是个蛋疼的问题 1.Applications -- System Tools -- Setting -- Regin & Language 2.input source -- + -- mo ...

  9. Python 迭代删除重复项,集合删除重复项

    1. 迭代删除重复项:先排序列表项,然后通过新迭代(not in)去除重复项,分片打印 def sanitize(time_string): if '-' in time_string: splitt ...

  10. NTFS文件系统简介(转载)

    原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...