应用ActionScript对放大镜的继续改进
来源:互联网 发布:软件行业销售招聘 编辑:程序博客网 时间:2024/05/21 12:51
我学习用的是一本叫《Flash MX ActionScript标准教程》的书,其中有一个例程是放大镜的,先照书上的代码来写,自己再慢慢琢磨改进,最后形成现在这个样子了。
书上的例程,对于放大的计算,根本就是错误的,我自己本来就是学地图的,对坐标转移变换比较了解,分析了一下就解决了,原则就是放大时,放大镜在放大图的位置必须与原图一致,后面我找了一下,网上有位兄弟已贴出类似的贴子,http://www.shendo.cn/archives/nettech/pagecode/Flash/techInfo_8225.html
我个人主要做了两个改进
1、不需要在工程里创建大图,直接在程序里产生
2、由上,可以自由定义放大的倍率,用加减号来控制
具体过程我这里不多说了,以下是代码
主时间轴代码
//---------------------全局变量---------------------------
//设置默认放大倍数为2倍
_global.Rate=2;
//---------------------全局函数---------------------------
//将指定的图片根据指定的倍数放大(缩小)
_global.SetPicSacle=function(picName,scaleRate) ...{
setProperty (picName, _xscale, scaleRate*100);
setProperty (picName, _yscale, scaleRate*100);
}
//----------------------主过程-------------------------
//复制要放大的图片,并命名为largeP
duplicateMovieClip (_root.smallPic, "largeP", -1);
//根据指定的倍数放大图片
_global.SetPicSacle("largeP",_global.Rate);
//trace(_global.Rate + " " + );
//开始拖拽放大镜
startDrag("_root.zoom",true);
Mouse.hide();
//设置放大镜的镜片为largeP的蒙板
_root.largeP.setMask(_root.zoom.glass);
放大镜对象zoom的动作代码
//检测放大镜的移动操作,当其移动时,同步移动放大的图片,使其当前点与图片的当前点在放大镜的中心点吻合
onClipEvent (enterFrame) ...{
//用point保存鼠标当前的坐标位置
point =new Object();
point.x=_root._xmouse;
point.y=_root._ymouse;
//移动largeP的位置,以使当前点与smallPic的当前点在放大镜的中心点吻合
_root.largeP._x=(point.x)*(1-_global.Rate)+_root.smallPic._x*_global.Rate;
_root.largeP._y=(point.y)*(1-_global.Rate)+_root.smallPic._y*_global.Rate;
}
onClipEvent (enterFrame) ...{
//用point保存鼠标当前的坐标位置
point =new Object();
point.x=_root._xmouse;
point.y=_root._ymouse;
//移动largeP的位置,以使当前点与smallPic的当前点在放大镜的中心点吻合
_root.largeP._x=(point.x)*(1-_global.Rate)+_root.smallPic._x*_global.Rate;
_root.largeP._y=(point.y)*(1-_global.Rate)+_root.smallPic._y*_global.Rate;
}
显示图片smallPic的动作代码
//图片操作,检测放大镜是否在图片范围内,如是执行放大镜拖拽操作,如否,停止放大镜拖拽操作
onClipEvent (enterFrame) ...{
if(hitTest(_root._xMouse,_root._yMouse,false)) ...{
startDrag("_root.zoom",true);
Mouse.hide ();
_root.largeP._visible=1;
_root.zoom._visible=1;
}
else ...{
stopDrag();
Mouse.show ();
_root.largeP._visible=0;
_root.zoom._visible=0;
}
}
//检测键盘操作,如果有按加减键,则进行放大和缩小操作,改变放大镜的放大倍数,最大为4倍,最小为1倍
onClipEvent (KeyDown) ...{
var code=Key.getCode();
var chg=0;
//按加号
if(code==107 or code==187) ...{
if(_global.Rate<4) ...{
_global.Rate=_global.Rate+0.1;
chg=1;
}
}
//按减号
else if (code==109 or code==189) ...{
if(_global.Rate>1) ...{
_global.Rate=_global.Rate-0.1;
chg=1;
}
}
if(chg=1) ...{
_global.SetPicSacle("largeP",_global.Rate);
}
}
onClipEvent (enterFrame) ...{
if(hitTest(_root._xMouse,_root._yMouse,false)) ...{
startDrag("_root.zoom",true);
Mouse.hide ();
_root.largeP._visible=1;
_root.zoom._visible=1;
}
else ...{
stopDrag();
Mouse.show ();
_root.largeP._visible=0;
_root.zoom._visible=0;
}
}
//检测键盘操作,如果有按加减键,则进行放大和缩小操作,改变放大镜的放大倍数,最大为4倍,最小为1倍
onClipEvent (KeyDown) ...{
var code=Key.getCode();
var chg=0;
//按加号
if(code==107 or code==187) ...{
if(_global.Rate<4) ...{
_global.Rate=_global.Rate+0.1;
chg=1;
}
}
//按减号
else if (code==109 or code==189) ...{
if(_global.Rate>1) ...{
_global.Rate=_global.Rate-0.1;
chg=1;
}
}
if(chg=1) ...{
_global.SetPicSacle("largeP",_global.Rate);
}
}
- 应用ActionScript对放大镜的继续改进
- 继续改进放大镜的设想
- 继续对AGG svg_viewer进行改进
- (转)对Live Writer支持的继续改进:设置随笔地址别名(EntryName)
- 对高斯消元法的改进以及在工程上的应用
- 对TinyJson 的改进
- 对上一篇文章: java求助的一点改进,但是还是存在一个很严重的错误,继续求助????
- libgsc继续改进(c++).
- 对TMemoryStream的一些改进
- 对PCA方法的改进
- struts2对webwork的改进
- 对SashForm的一点改进
- 对TMemoryStream的一些改进
- 对TMemoryStream的一些改进
- 对上一次的改进
- 对PCA方法的改进
- seandroid对selinux的改进
- 对二分查找的改进
- 全选和全不选checkboxList
- package 与 import
- 清空SELECT的OPTION
- C#判断一个string是否为数字
- MFC SDI应用程序的启动顺序
- 应用ActionScript对放大镜的继续改进
- Dom4j递归解析XML实现JS的getElementsByName类似方法
- 学习CSS优化的十八项技巧
- 安装oracle10g
- 《JavaScript高级程序设计》学习笔记(表格排序)
- 鼠标滚轮缩放图片javascript
- JS操作select相关方法:新增 修改 删除 选中 清空 判断存在 等
- 类似msn的提示效果代码系列一:简单的脚本提示
- 哈希表(Hashtable)简述