一种优化的svg演示放映方法

文档序号:6555816阅读:138来源:国知局
专利名称:一种优化的svg演示放映方法
技术领域
本发明涉及计算机应用领域,尤其涉及一种SVG演示放映方法。
背景技术
随着演示文件(诸如,Microsoft Office、Open Office、WPS Office中的演示文件)在政府办公、教育实践、企业交流等各个领域中的使用越来越广,对演示文件本身的要求也越来越高演示文件已不能仅仅满足于文本、图形、图像和视频了,应该而且必须具备丰富而优秀的交互性能;同一套演示文件必须能很方便的在不同的介质上发布,除了传统的纸和PC之外,还有Web发布、PDA、手机等手持设备。但由于演示文件是二进制文件,不是基于XML(eXtensible MarkupLanguage)的文件,所以要发布或再利用一个演示文件不是很容易。因此,现在有很多研究都在试图重新构建一个更好的演示文件,大致思路是首先基于XML来表达演示的逻辑和表现数据,再利用XSLT或其它工具将XML演示文件转换为具体表现形式,它们都具备生成SVG(Scalable Vector Graphics可伸缩矢量图形)文件的功能,但它们都是直接使用SVG表达演示内容,一方面失去了演示文件中原有的许多特有概念,另一方面导致动画不能重用,进而使得SVG文件尺寸过大等,这对于当今互联网依赖性越来越强的环境下,很不利于网络传输。另外,如果采用纯XML方式表达演示文件的话,虽然逻辑会非常清晰,但会额外增加由XML转换成可被SVG应用程序理解的SVG标准格式文档所需的难度,甚至可能到SVG应用程序无法实现的程度。因此,出现了一种能够尽可能多地保留演示中特有概念而且易于被SVG应用程序理解和应用的SVG格式文档,同时也出现了SVG演示放映方法,参见图1,本公司申请的名称为《一种SVG演示放映器及进行演示放映的方法》发明专利公开了一种SVG演示放映方法,该方法有一定不足之处,它在放映时,需要将整个放映列表中的所有Slide数据拷贝到DOM树中的节点中,这样一方面可能导致在整个DOM树中,元素id不唯一,使得一些需求实现起来变得极为复杂甚至无法实现,如交互动画;另一方面,所有的Slide数据都在同一个DOM树中,相互之间的独立性差,在进行页切换时无法实现利用刚播放过的Slide作切换背景,而只能是用黑色作为切换背景;还有,因为频繁地对DOM树进行操作,因此在处理尺寸较大的文档时数据准备阶段的加载时间长,效率很低。

发明内容
本发明克服了现有技术中的不足,提供一种加载时间短、处理效率高的SVG演示放映方法。
为了解决上述技术问题,通过以下技术方案实现一种SVG演示放映方法,该方法将系统分为应用层、逻辑层和数据层,所述应用层主要负责事件的接收,以及把接收到的事件分发给逻辑层中SVG演示放映器中的对应模块;逻辑层中的SVG演示放映器主要包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;数据层包括DOM原始数据定义区、DOM放映区、播放状态存储单元和其它数据存储单元;该演示放映方法还包括放映页的初始化过程和与用户交互的过程,其中,上述数据层还包括播放对象存储单元和数据对象存储单元,所述DOM放映区只存储最近放映过的Slide和当前正在放映的Slide,前者称为节点一,后者称为节点二。
上述SVG演示放映方法中,所述数据对象存储单元按照SVG演示文档中自定义放映列表中Slide的放映顺序存放已播放过的Slide对象集;所述播放对象存储单元用于存储原始Slide数据对象集或放映页数据准备模块生成的放映页数据对象集的数组。
与现有技术现相比,由于本发明演示放映方法中将动态合成的放映页数据全部存储在数据对象存储单元,DOM树中的DOM放映区至多只保留了两份Slide的数据,并且在数据合成完成以后,原始定义数据从DOM树中删除,这样,一方面使DOM树中所有对象的id唯一,各部分数据之间的独立性更强;另一方面大大减小了DOM树的复杂度和大小。使得原来无法实现的一些诸如交互动画的特殊需求游刃而解,放映系统功能更为强大,更具扩展性,而且加快了执行速度,提高了效率。


图1是现有技术中演示放映方法中事件与各模块关系图;图2是本发明演示放映方法中事件与各模块关系图;图3是本发明演示放映方法中静态数据合成示意图;图4是本发明演示放映方法中也切换流程图。
具体实施例方式
一种SVG演示放映方法,该方法将系统分为应用层、逻辑层和数据层,所述应用层主要负责事件的接收,以及把接收到的事件分发给逻辑层中SVG演示放映器中的对应模块;逻辑层中的SVG演示放映器主要包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;数据层包括DOM原始数据定义区、DOM放映区、播放状态存储单元和其它数据存储单元;该演示放映方法还包括放映页的初始化过程和与用户交互的过程,其中,上述数据层还包括播放对象存储单元和数据对象存储单元,所述DOM放映区只存储最近放映过的Slide和当前正在放映的Slide,前者称为节点一,后者称为节点二。上述SVG演示放映方法中,所述数据对象存储单元按照SVG演示文档中自定义放映列表中Slide的放映顺序存放已播放过的Slide对象集;所述播放对象存储单元用于存储原始Slide数据对象集或放映页数据准备模块生成的放映页数据对象集的数组。
本发明方法中的数据逻辑结构的改变,使得对应的放映页数据准备模块和页切换模块的处理流程也发生了相应变化。
放映页数据准备模块的处理流程是在初始化事件中,调用放映页数据准备模块提供的接口,准备放映页数据。按照Slide的定义顺序获取该Slide原始数据,并根据该Slide原始数据中的一个特殊标识,判断其与对应Master的关联关系,在内存中将Master数据与Slide原始数据按照指定的规则,合成可以直接被SVG播放器显示的一张完整的Slide,即放映页数据,然后将该Slide对象保存到数据对象存储单元中的相应位置,供其它模块使用,使用相同方法直至所有Slide转换完毕,(也可以使用相同方法只将部分Slide转换完毕,而其他Slide可在放映前实时准备,即放映到某一页时,才开始准备这一页的数据;数据来源可以是单独的文件,也可以是多个文件,可以是本地的,也可以是网络上的。)最后,移除DOM树中所有原始Slide数据对应的节点,还可以移除Maste数据对应的节点(作为子权利要求)。如果指定了自定义放映名,则按照指定自定义放映名读取对应的播放列表内容,否则按照文档中Slide的定义顺序作为播放列表内容。
页切换模块的处理流程是在页切换过程中,首先要根据当前的状态(主要指当前放映的是第几页)及动作类型,从DOM放映区删除节点一,再从数据对象存储单元中找到目的Slide对应的对象,追加到DOM放映区中。这样,原来的节点二变成了节点一,新追加进去的节点为节点二。最后,触发节点二的页切换动画,并将节点二的页索引号传回给播放状态管理模块,由它对当前播放状态进行更新,将结果保存在播放状态存储单元中,完成整个页切换动作。切换到上一页或下一页与跳转到指定页的主要区别在于切换到上一页或下一页无需播放状态管理提供将要播放的Slide的索引号,只需要提供当前Slide的索引号及动作方向;而切换到指定页不仅需要播放状态管理模块提供当前页的索引号,还需要提供将要播放的Slide的索引号。如果在进行页切换时,动画数据在放映页数据准备模块没有完全准备好,则此处还需要先将动画数据准备完整,动画数据的加载仍然是使用“函数动画”法。
下面一实例的方式介绍本发明SVG演示放映方法中初始化和与用户交互过程的工作流程整个放映系统的运行都是通过DOM的事件机制来触发的。SVG演示数据文档加载后,当需要初始化数据时,通过调用特定响应函数,也即放映页数据准备模块为应用层提供的接口,作为处理SVG文档的入口,将原始Slide数据与Master数据根据Slide定义数据中的特定标记按照指定原则进行合成,生成可以直接被SVG播放器显示的数据,并将生成的数据暂存到数据对象存储单元;然后,读取指定自定义放映名中的播放列表,如果指定的放映名不存在或没有指定自定义放映名,则按Slide的定义顺序做为播放列表。当放映页数据准备完毕以后,系统等待用户事件的产生,并由播放状态管理模块负责为各种事件提供接口供各种事件的处理入口调用。
播放状态管理模块共可以处理五种类型的动作切换到下一页、切换到上一页、切换到指定页、下一动作和上一动作。对于前三种类型的动作,播放状态管理模块只需要直接调用页切换模块并为它提供关键信息,并在页切换模块执行特定动作以后更新当前放映状态就可以了。对于后两种动作,是现实存在的复杂动作,需要由播放状态模块根据当前放映状态对它们进行一次深加工,转换成页切换动作或页内动画放映动作或页内动画回退动作。然后再决定调用页切换模块完成页切换动作,或是调用页内动画放映模块完成页内动画放映动作及页内动画回退动作。不管是执行页切换动作,还是执行页动画放映动作或是页内动画回退操作,在执行指定动作的同时,通知播放状态管理模块同步更新当前放映状态,如修改当前Slide的索引号或是当前动画的索引号。另外,还可以通过索引页处理模块完成页的跳转及更改自定义放映方案。
如图3所示,在合成数据之前,系统首先进行版本判断。每一个生成的SVG演示文档中都包含有该文档的版本信息,如果从文档中读取的版本信息与放映系统的版本信息不一致,则会终止对文档的处理,直接结束放映。如果一致,系统则开始准备数据,其过程为从幻灯片页数据定义区复制指定的Slide数据为SlideCut,并重新生成SlideCut的id,假设原Slide的id为“oldId”,与它关联的Master的id为“mastered”,则新生成的SlideCut的id为“oldId”+.?(?表示该文档中不重复的整数字,从0开始,依次递增),如“oldId.0”;然后,使用DOM函数获取SlideCut中id值为“oldId.master”的元素,该id所对应的元素的作用是为Slide与Master建立关联,指出该Slide是否忽略对应Master中的背景图形,为了说明方便,后面简称关联元素。如果该关联元素的xlink:href属性值为“masterId”,则表示不忽略Master中的背景图形,否则如果为“masterId.background”,则表示忽略。当忽略时,将此关联元素的id改为“oldId.master.ignoreshapes”,否则,将其id改为“masterId.background”,并将masterId中所有的shapes复制到SlideCut中。值得注意的是,在SVG中,各Shape的层次关系是通过它们在数据定义时的先后顺序决定的,所以为了在把Master中的shapes复制到SlideCut以后,不导致Master中的Shape覆盖SlideCut中的Shape,必须将Master中的Shapes复制到SlideCut中关联元素的之后,所有Shapes定义之前,这个操作可以利用DOM提供的insertBefore接口来完成。最后,将生成的SlideCut对象暂存到数据对象存储区中的对应位置。完成一次Slide静态数据的合成操作。
按照上述方法,直至按照文档中Slide的定义顺序将所有原始Slide数据转换成静态数据暂存到数据对象存储区。合成某一v_Slide对象对应Slide的静态数据。
如图4所示,当播放状态管理模块对动作经过分析后,如果动作是涉及页切换的,播放状态管理模块则会调用页切换模块提供的内部接口,通知页切换模块处理发生的动作,并为页切换模块提供关键信息,以便让页切换模块能够准确调用内部相应子模块,执行动作指定的功能。当页切换模块的内部接口被调用后,页切换模块被激活,它会立即对播放状态管理模块提供的信息进行判断,如果是跳到指定页,则首先判断该页是否在当前放映列表中,要是在放映列表中的话,直接移除DOM放映区中的节点一,将数据对象存储单元中的指定页对象追加到DOM放映区中,并激活页切换动画,同时,播放状态管理模块同步更新当前页号,完成页跳转,要是不在放映列表中,则只移除DOM放映区中的节点一,将数据对象存储单元中的指定页对象追加到DOM放映区中,并激活页切换动画,而不需要播放状态管理模块同步更新当前页号,以便在页动画放映完毕能顺利跳回到原Slide。如果是跳到下一页或是上一页,换页的方法与跳转到指定页相似,但在页切换之前需要把节点一的内容暂存到播放对象存储单元后再从DOM放映区移除,同时还要考虑跳转页是否隐藏。……为了说明方便,假设当前页的索引号为C,并且把该索引值赋给K。如果是“上一页”,则首先判断第K页是不是首页,如果是首页,则不执行任何动作,直接结束流程,否则,K值自减1,再判断第K页是不是隐藏页(visibility属性值为“hidden”),如果是隐藏页,再判断它曾经是否被播放过,如果从来没有被播放过,则直接跳过第K页,使用相同方法重复上一动作;如果不是隐藏页,则直接显示第第K页,隐藏第C页,即当前页,并判断第K页动画数据是否已准备好,在没有准备好的情况下,还需要启用页动画数据准备模块加第K页的页动画数据,最后激活第K页的页动画,显示页最后一次放映时的状态。如果是“下一页”,则首先判断第K页是不是最后一页,如果是最后一页,则不执行任何动作,直接结束流程,否则,K值自加1,再判断第K页是不是隐藏页,如果是隐藏页,则直接跳过第K页,使用相同方法继续判断下一页;如果不是隐藏页,则将第K页显示,第C页隐藏,即当前页隐藏,并调用页动画数据准备模块,加载第K页的页动画数据,加载方法是如果Slide本身有页动画,则直接使用第K页的页动画,如果第K页没有页动画,则尝试加载第K页对应的母版的动画作为第K页的页动画,如果页动画在放映页数据准备模块已经被加载,则此处只需调用页内动画函数为第K页准备页内动画,加载方法是首先加载对应母版中具有动画的所有Shape的动画,再加载第K页中所有具有动画的Shape的动画,如果此处页内动画数据也已经在放映页数据准备模块中准备好,则直接启动第K页页动画。不管是跳到上一页,还是下一页,都必须同步更新当前播放状态,即C=K,使当前页号始终是被显示的那页的页号,并将结果保存到播放状态存储单元,便于播放状态管理模块处理。
以上步骤仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种SVG演示放映方法,该方法将系统分为应用层、逻辑层和数据层,所述应用层主要负责事件的接收,以及把接收到的事件分发给逻辑层中SVG演示放映器中的对应模块;逻辑层中的SVG演示放映器主要包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;数据层包括DOM原始数据定义区、DOM放映区、播放状态存储单元和其它数据存储单元;该演示放映方法还包括放映页的初始化过程和与用户交互的过程,其特征在于,上述数据层还包括播放对象存储单元和数据对象存储单元,所述DOM放映区只存储最近放映过的Slide和当前正在放映的Slide,前者称为节点一,后者称为节点二。
2.根据权利要求1所述的SVG演示放映方法,其特征在于,所述数据对象存储单元按照SVG演示文档中自定义放映列表中Slide的放映顺序存放已播放过的Slide对象集。
3.根据权利要求1所述的SVG演示放映方法,其特征在于,所述播放对象存储单元用于存储原始Slide数据对象集或放映页数据准备模块生成的放映页数据对象集的数组。
4.根据权利要求1所述的SVG演示放映方法,其特征在于,所述放映页数据准备模块的处理流程如下在初始化事件中,按照Slide的定义顺序获取该Slide原始数据,并根据该Slide原始数据合成可以直接被SVG播放器显示的一张完整的Slide,即放映页数据,然后将该Slide对象保存到数据对象存储单元中的相应位置,供其它模块使用,使用相同方法直至所有Slide转换完毕,最后,移除DOM树中所有原始Slide数据对应的节点。如果指定了自定义放映名,则按照指定自定义放映名读取对应的播放列表内容,否则按照文档中Slide的定义顺序作为播放列表内容。
5.根据权利要求1所述的SVG演示放映方法,其特征在于,所述放映页数据准备模块的处理流程如下在初始化事件中,按照Slide的定义顺序获取该Slide原始数据,并根据该Slide原始数据合成可以直接被SVG播放器显示的一张完整的Slide,即放映页数据,然后将该Slide对象保存到数据对象存储单元中的相应位置,供其它模块使用,使用相同方法将部分Slide转换完毕,而其他Slide可在放映前实时准备,最后,移除DOM树中所有原始Slide数据对应的节点。如果指定了自定义放映名,则按照指定自定义放映名读取对应的播放列表内容,否则按照文档中Slide的定义顺序作为播放列表内容。
6.根据权利要求1所述的SVG演示放映方法,其特征在于,所述页切换模块的处理流程如下首先要根据当前的状态及动作类型,从DOM放映区删除节点一,再从数据对象存储单元中找到目的Slide对应的对象,追加到DOM放映区中;将原来的节点二变成了节点一,新追加进去的节点为节点二;最后,触发节点二的页切换动画,并将节点二的页索引号传回给播放状态管理模块,由它对当前播放状态进行更新,将结果保存在播放状态存储单元中,完成整个页切换动作。
全文摘要
本发明涉及计算机应用领域,尤其涉及一种SVG演示放映方法。一种SVG演示放映方法,该方法将系统分为应用层、逻辑层和数据层,数据层包括DOM原始数据定义区、DOM放映区、播放状态存储单元和其它数据存储单元;该演示放映方法还包括放映页的初始化过程和与用户交互的过程,其中,上述数据层还包括播放对象存储单元和数据对象存储单元,所述DOM放映区只存储最近放映过的Slide和当前正在放映的Slide。与现有技术现相比,本发明演示放映方法使得原来无法实现的一些诸如交互动画的特殊需求游刃而解,放映系统功能更为强大,更具扩展性,而且加快了执行速度,提高了效率。
文档编号G06F17/30GK1862535SQ20061003386
公开日2006年11月15日 申请日期2006年2月23日 优先权日2006年2月23日
发明者熊玉辉, 曾崴 申请人:珠海金山软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1