`
arz611wr
  • 浏览: 13146 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

AS3容器的实现原理

 
阅读更多

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 度,并且您左右滚动它,则实际上显示对象会上下滚动。
分享到:
评论

相关推荐

    解析javascript瀑布流原理实现图片滚动加载

    实现原理: 对容器中已有数据块元素进行第一次计算1 容器总宽度 2 列宽度 3 最小列数 ,得到列数后,用一个数组存放盒子所有高度,找出最小高度。之后根据序列号更新高度;看着有些拗口,实现起来就很简

    基于Java的支教信息共享系统设计与实现.docx

    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 前台功能...

    Javascript幻灯片播放功能实现过程解析

    实现原理 step1 设置容器,包含图片、翻页、下标等元素,通过相对定位来布局。 step2 将幻灯片变化,需要改变的元素放在一个字容器内,display设为none,并且采取动画来变化。 step3设置js函数,将应该播放的元素...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...

    Python基于class()实现面向对象原理详解

    你可以首先只把类当做一个容器来使用 class Cycle: def __init__(self,r): self.pi=3.14 self.r=r a=Cycle(4) b=Cycle(7) 你看,我们定义了一个 Cycle 类,我们现在只是将它当做一个数据集合来用,我们利用其实...

    HashMap的工作原理和底层实现(二)红黑树的左旋、右旋

     HashMap是java最常用的容器之一,本文会通过阅读源码的方式来理解HashMap中是如何进行红黑树的左旋和右旋 一、什么是左旋和右旋  红黑树的性质 每个节点要么是黑色,要么是红色。 根节点是黑色。 每个叶子...

    javascript实现无缝上下滚动特效

    3、改变容器的scrollTop(上下滚动)属性的值,让内容上下移动一个节点的位置(滚动的原理); 4、到滚动的高度scrollTop大于或等于要滚动节点的高度时,设置scrollTop=0,并把把子节点树中的第一个移动到最后,...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.1.1. 在JBoss AS 上运行示例..................................................................................................................................14 1.1.2. 在Tomcat 服务器上运行示例..........

    基于javascript实现按圆形排列DIV元素(三)

    $(this).css({left:Math.sin((ahd*index+ainhd))*radius+...一、原理分析:  1.1按椭圆运运  前面两个随笔分析了“圆形排列”和“按圆形运动”,知道了“排列”和“运动”这两个以后,再来看这个实例应该就有基础了

    jquery(javascript)自动序列编号和属性编号实现代码

    自动序列编号和自动属性编号,效果图如下:实现原理: 添加和删除是逆向过程,实现是一致的。 增加时,向父容器中增加元素append方法,并将所有的自定义属性编号和序列编号设置为空,然后通过$.each方法,重新为...

    基于单片机液位控制的设计.doc

    ................................8 3 系统硬件设计 9 3.1 驱动电路设计 9 3.2 报警电路设计 9 3.3液位指示电路设计 10 3.4压力自动控制模拟和手动操作控制电路设计 12 3.5晶振电路 13 3.6 复位电路 14 4 系统软件...

    SQLserver-数据库-安全监控系统.doc

    在这之上的业务托管层可视做所有业务的容器和管理平台,其中最重要的功能则是提 供信息注册,以实现信息生产者和信息消费者之间的沟通。在业务托管层的边缘是信息 网关,负责将业务数据按照标准协议转化成其他格式...

    详解asp.net core 依赖注入

     好久没有写微博了,因为前段时间由于家庭原因决定从工作了3年多的北京转移到上海去。依赖注入在学习net core的时候也有写过类似的东西,只是实践的较少,结果来到上海新公司系统框架涉及到了这块知识点,所以在...

    ZendFramework中文文档

    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设计模式 – 组合模式原理与应用实例分析

    本文实例讲述了javascript设计模式 – 组合模式原理与应用。分享给大家供大家参考,具体如下: 介绍:组合模式又叫部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来...

    详解javascript实现瀑布流绝对式布局

    JS实现原理 其实瀑布式主要的难点就在于,如果将图片整齐的排列在对应的列下,以及什么时候开始刷新加载图片。 而图片整齐的排列的主要逻辑和算法即,先获取容器内可以放多少列,然后,通过计算,存放第一列的高度...

    拦截asp.net输出流并进行处理的方法

    方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有的向页面输出都变成了向StringBuilder输出,然后我们对StringBuilder处理完成之后,再把Response的输出...

    spring.net中文手册在线版

    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框架 第十...

    工程硕士学位论文 基于Android+HTML5的移动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...

Global site tag (gtag.js) - Google Analytics