AS3容器的实现原理
2010年07月09日
所谓容器,不是指displayobjectcontainer,而是指可以承载子显示对象,并根据容器的尺寸和滚动条进行子显示对象显示的container,如flex中的container包中的相关类。
容器最大的难点就是即便是内容的尺寸高出容器自身width、height时
1. 外界看到只是容器自身尺寸区域,不会被撑破
2. 外界获取container.width和height必须是container自身的尺寸,而不会随着内容的尺寸变化而变化!
其实我一开始想到的实现方式是mask遮罩,也实现了一个例子,结果发现其不符合第2条,因为一般的displayobjectcontainer在addchild后,container尺寸会随着child的尺寸发生改变,虽然你用一个矩形区域去遮罩child,但是外界获取container的width和height还是会包括整个区域,也就是说遮罩外的部分仍会被计入container的尺寸中!
后来查了下as3语言参考,发现displayobejct有一个scrollrect属性,原来奥妙就在于此阿!
经过试验,发现对某一个displayobject添加scrollrect属性后,其width、height就是这个scrollrect的width和height!不管自身尺寸比这个rect大还是小!
注:ms有一个延迟,在设定scrollrect后立马查看尺寸居然不是rect的尺寸,而在enterframe监听中会发现过了这一桢,width、height会变为rect的尺寸,不知何故。
在Ticore's Blog中找到了一个hack方法,哈哈,使scrollrect立即生效!
//*/
// Force DisplayObject update dimensions
var bmpData:BitmapData = new BitmapData(1, 1);
bmpData.draw(mc);
//*/
还有就是直接更改scrollrect的x,y,width,height属性是没有效果的,要new一个rect指向scrollrect,然后修改rect再赋值给显示对象的scrollrect,类似于soundchannel的soundtransform,估计是as只有在set这些属性的时候根据这些属性里的各特性值统一设定某些东西,以后更改这些属性里面的某特性值是没有效果的,要重新赋这个属性)
总结,as3的container实现可以借助scrollrect,在container中滚动时,改变scrollrect的位置,以滚动子显示对象!
附:
1. flex 3.0种的container类(所有容器类的父类)Container.as中的一段代码:
protected function scrollChildren():void
{
if (!contentPane)
return;
var vm:EdgeMetrics = viewMetrics;
var x:Number = 0;
var y:Number = 0;
var w:Number = unscaledWidth - vm.left - vm.right;
var h:Number = unscaledHeight - vm.top - vm.bottom;
if (_clipContent)
{
x += _horizontalScrollPosition;
if (horizontalScrollBar)
w = viewableWidth;
y += _verticalScrollPosition;
if (verticalScrollBar)
h = viewableHeight;
}
else
{
w = scrollableWidth;
h = scrollableHeight;
}
// If we have enough space to display everything, don't set
// scrollRect.
var sr:Rectangle = getScrollableRect();
if (x == 0 && y == 0 // Not scrolled
&& w >= sr.right && h >= sr.bottom && // Vertical content visible
sr.left >= 0 && sr.top >= 0 && _forceClippingCount as3.0语言参考中对scrollrect的解释
scrollRect 属性
scrollRect:Rectangle [read-write]
语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9
显示对象的滚动矩形范围。 显示对象被裁切为矩形定义的大小,当您更改 scrollRect 对象的 x 和 y 属性时,它会在矩形内滚动。
scrollRect Rectangle 对象的属性使用显示对象的坐标空间,并缩放到像整个显示对象一样。 滚动显示对象上已裁切窗口的转角范围是显示对象的原点 (0,0) 和矩形的宽度和高度定义的点。 它们不按原点居中,而是使用原点定义区域的左上角。 滚动的显示对象始终以整像素为增量进行滚动。
您可以通过设置 scrollRect Rectangle 对象的 x 属性来左右滚动对象, 还可以通过设置 scrollRect 对象的 y 属性来上下滚动对象。 如果显示对象旋转了 90 度,并且您左右滚动它,则实际上显示对象会上下滚动。
发表评论
-
jQuery 获取屏幕高度
2013-12-26 01:32 541做手机Web开发做浏览器兼容用到了,所以在网上找了些汇总下。 ... -
jQuery-事件绑定与事件委托
2013-12-26 01:31 772jQuery中给DOM元素添加事件处理程序常用的方式: $(& ... -
深入分析Flex[Bindable]及使用方法
2012-01-20 01:21 423深入分析Flex[Bindable]及使用方法 2010年0 ... -
页面中嵌入FLEX应用-传参
2012-01-20 01:21 722页面中嵌入FLEX应用-传参 2010年06月29日 项 ... -
用Parsley实现Flex Ioc的简单例子
2012-01-20 01:21 660用Parsley实现Flex Ioc的简单例子 2010年0 ... -
Flex嵌入jsp开发心得
2012-01-20 01:21 504Flex嵌入jsp开发心得 2010年07月02日 PM ... -
flex与数据库交互
2012-01-20 01:21 358flex与数据库交互 2010年07月04日 Flex最 ... -
大全【极有收藏价值的】
2012-01-19 09:11 429大全【极有收藏价值的 ... -
提高小学作文实效性的思考
2012-01-19 09:11 348提高小学作文实效性的思考 2010年11月17日 摘要: ... -
小学生评语大全
2012-01-19 09:11 518小学生评语大全 2011年07月14日 你是一位可爱的小 ... -
小学生期末评语经典大全
2012-01-19 09:11 606小学生期末评语经典大全 2011年12月15日 1.你是 ... -
超级爆笑小学生作文大全,这孩子太搞了
2012-01-19 09:11 581超级爆笑小学生作文大全,这孩子太搞了 2011年11月03日 ... -
操作系统总结(除课后计算题外)
2012-01-17 01:40 721操作系统总结(除课后计算题外) 2012年01月12日 ... -
Linux基础学习 收藏
2012-01-17 01:40 628Linux基础学习 收藏 2011年06月24日 Lin ... -
2011-9-13
2012-01-17 01:40 4942011-9-13 2011年09月13日 JavaSE ... -
linux共享内存
2012-01-17 01:40 638linux共享内存 2010年07月 ... -
JAVA经典32问
2012-01-17 01:40 502JAVA经典32问 2011年12月28 ... -
系统调用、POSIX、C库、系统命令和内核函数
2012-01-15 20:55 666系统调用、POSIX、C库、 ... -
【顶】FLASH教程――目录
2012-01-15 20:55 710【顶】FLASH教程――目录 2009年09月15日 追 ... -
【顶】flash教程――目录
2012-01-15 20:55 707【顶】flash教程――目录 2009年09月15日 F ...
相关推荐
实现原理: 对容器中已有数据块元素进行第一次计算1 容器总宽度 2 列宽度 3 最小列数 ,得到列数后,用一个数组存放盒子所有高度,找出最小高度。之后根据序列号更新高度;看着有些拗口,实现起来就很简
13 4.1.1 架构建模 13 4.1.2 实现原理 13 4.2 系统功能模块设计 13 4.3 数据库设计 14 4.3.1 数据库概念结构设计 14 4.3.2 数据库逻辑结构设计 15 4.4 功能模块划分 16 4.5 本章小结 17 5 系统实现 19 5.1 前台功能...
实现原理 step1 设置容器,包含图片、翻页、下标等元素,通过相对定位来布局。 step2 将幻灯片变化,需要改变的元素放在一个字容器内,display设为none,并且采取动画来变化。 step3设置js函数,将应该播放的元素...
这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...
你可以首先只把类当做一个容器来使用 class Cycle: def __init__(self,r): self.pi=3.14 self.r=r a=Cycle(4) b=Cycle(7) 你看,我们定义了一个 Cycle 类,我们现在只是将它当做一个数据集合来用,我们利用其实...
HashMap是java最常用的容器之一,本文会通过阅读源码的方式来理解HashMap中是如何进行红黑树的左旋和右旋 一、什么是左旋和右旋 红黑树的性质 每个节点要么是黑色,要么是红色。 根节点是黑色。 每个叶子...
3、改变容器的scrollTop(上下滚动)属性的值,让内容上下移动一个节点的位置(滚动的原理); 4、到滚动的高度scrollTop大于或等于要滚动节点的高度时,设置scrollTop=0,并把把子节点树中的第一个移动到最后,...
1.1.1. 在JBoss AS 上运行示例..................................................................................................................................14 1.1.2. 在Tomcat 服务器上运行示例..........
$(this).css({left:Math.sin((ahd*index+ainhd))*radius+...一、原理分析: 1.1按椭圆运运 前面两个随笔分析了“圆形排列”和“按圆形运动”,知道了“排列”和“运动”这两个以后,再来看这个实例应该就有基础了
自动序列编号和自动属性编号,效果图如下:实现原理: 添加和删除是逆向过程,实现是一致的。 增加时,向父容器中增加元素append方法,并将所有的自定义属性编号和序列编号设置为空,然后通过$.each方法,重新为...
................................8 3 系统硬件设计 9 3.1 驱动电路设计 9 3.2 报警电路设计 9 3.3液位指示电路设计 10 3.4压力自动控制模拟和手动操作控制电路设计 12 3.5晶振电路 13 3.6 复位电路 14 4 系统软件...
在这之上的业务托管层可视做所有业务的容器和管理平台,其中最重要的功能则是提 供信息注册,以实现信息生产者和信息消费者之间的沟通。在业务托管层的边缘是信息 网关,负责将业务数据按照标准协议转化成其他格式...
好久没有写微博了,因为前段时间由于家庭原因决定从工作了3年多的北京转移到上海去。依赖注入在学习net core的时候也有写过类似的东西,只是实践的较少,结果来到上海新公司系统框架涉及到了这块知识点,所以在...
4.2. 缓存原理 4.2.1. Zend_Cache 工厂方法 4.2.2. 标记纪录 4.2.3. 缓存清理 4.3. Zend_Cache前端 4.3.1. Zend_Cache_Core 4.3.1.1. 简介 4.3.1.2. 可用选项 4.3.1.3. 例子 4.3.2. Zend_Cache_Frontend_...
本文实例讲述了javascript设计模式 – 组合模式原理与应用。分享给大家供大家参考,具体如下: 介绍:组合模式又叫部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来...
JS实现原理 其实瀑布式主要的难点就在于,如果将图片整齐的排列在对应的列下,以及什么时候开始刷新加载图片。 而图片整齐的排列的主要逻辑和算法即,先获取容器内可以放多少列,然后,通过计算,存放第一列的高度...
方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有的向页面输出都变成了向StringBuilder输出,然后我们对StringBuilder处理完成之后,再把Response的输出...
17.14. Database operations as Objects 17.14.1. AdoNonQuery 17.14.2. AdoQuery 17.14.3. MappingAdoQuery 17.14.4. Stored Procedure 17.14.5. DataSetOperation 18. ORM集成 18.1. 简介 第三部分. Web框架 第十...
(3)针对页面自适应问题,本文结合渐进增强以及拥抱流式布局的思想,同时研究利用了移动设备的视口特性,实现跨分辨率、跨设备的页面自适应。 (4)针对系统的功能实现问题,通过结合利用原生态框架与HTML5的跨平台...
3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8 7、Java 有没有goto? 8 8、int 和Integer 有什么区别? 9 9...