專利名稱:一種svg演示放映器及進(jìn)行演示放映的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及一種演示放映器和使用該演示放映器的演示放映方法。
背景技術(shù):
隨著演示文件(諸如,Microsoft Office、Open Office、WPSOffice中的演示文件)在政府辦公、教育實(shí)踐、企業(yè)交流等各個(gè)領(lǐng)域中的使用越來越廣,對(duì)演示文件本身的要求也越來越高演示文件已不能僅僅滿足于文本、圖形、圖像和視頻了,應(yīng)該而且必須具備豐富而優(yōu)秀的交互性能;同一套演示文件必須能很方便的在不同的介質(zhì)上發(fā)布,除了傳統(tǒng)的紙和PC之外,還有Web發(fā)布、PDA、手機(jī)等手持設(shè)備。但由于演示文件是二進(jìn)制文件,不是基于XML(eXtensibleMarkup Language)的文件,所以要發(fā)布或再利用一個(gè)演示文件不是很容易。因此,現(xiàn)在有很多研究都在試圖重新構(gòu)建一個(gè)更好的演示文件,大致思路是首先基于XML來表達(dá)演示的邏輯和表現(xiàn)數(shù)據(jù),再利用XSLT或其它工具將XML演示文件轉(zhuǎn)換為具體表現(xiàn)形式,它們都具備生成SVG(Scalable Vector Graphics可伸縮矢量圖形)文件的功能,但它們都是直接使用SVG表達(dá)演示內(nèi)容,一方面失去了演示文件中原有的許多特有概念,另一方面導(dǎo)致動(dòng)畫不能重用,進(jìn)而使得SVG文件尺寸過大等,這對(duì)于當(dāng)今互聯(lián)網(wǎng)依賴性越來越強(qiáng)的環(huán)境下,很不利于網(wǎng)絡(luò)傳輸。另外,如果采用純XML方式表達(dá)演示文件的話,雖然邏輯會(huì)非常清晰,但會(huì)額外增加由XML轉(zhuǎn)換成可被SVG應(yīng)用程序理解的SVG標(biāo)準(zhǔn)格式文檔所需的難度,甚至可能到SVG應(yīng)用程序無法實(shí)現(xiàn)的程度。因此,出現(xiàn)了一種能夠盡可能多地保留演示中特有概念而且易于被SVG應(yīng)用程序理解和應(yīng)用的SVG格式文檔,但同時(shí)需要一個(gè)理解和處理該類型文檔的放映器和進(jìn)行放映方法。
發(fā)明內(nèi)容
本發(fā)明克服了現(xiàn)有技術(shù)中的缺點(diǎn),提供一種可處理SVG演示數(shù)據(jù)文檔的SVG演示放映器和利用它進(jìn)行演示放映方法。
為了解決上述技術(shù)問題,通過以下技術(shù)方案實(shí)現(xiàn)一種SVG演示放映器,其位于系統(tǒng)邏輯層,其包括播放狀態(tài)管理模塊、放映頁數(shù)據(jù)準(zhǔn)備模塊、頁切換模塊和頁內(nèi)動(dòng)畫放映模塊;該放映頁數(shù)據(jù)準(zhǔn)備模塊包括靜態(tài)數(shù)據(jù)準(zhǔn)備模塊;該頁切換模塊包括后翻頁模塊和前翻頁模塊;該頁內(nèi)動(dòng)畫放映模塊包括動(dòng)畫放映模塊和動(dòng)畫消隱模塊;上述各模塊均有與系統(tǒng)數(shù)據(jù)層進(jìn)行數(shù)據(jù)交換的接口;系統(tǒng)應(yīng)用層可接收鼠標(biāo)和鍵盤事件,同時(shí)把接收的事件分發(fā)給SVG演示放映器中的各模塊。
本發(fā)明還提供一種演示放映方法,其包括如下過程a.加載SVG演示數(shù)據(jù)文檔,利用DOM提供的onload事件,調(diào)用它的響應(yīng)函數(shù),在響應(yīng)函數(shù)中調(diào)用放映頁數(shù)據(jù)準(zhǔn)備模塊提供的接口,準(zhǔn)備放映頁數(shù)據(jù);b.判斷是否指定了自定義放映列表,如果是,則讀取自定義放映列表的內(nèi)容,如果否,以Slide的定義順序作為自定義放映列表內(nèi)容;c.通過放映頁數(shù)據(jù)準(zhǔn)備模塊中的靜態(tài)數(shù)據(jù)準(zhǔn)備模塊,根據(jù)列表內(nèi)容,合成可以直接被SVG播放器顯示的靜態(tài)數(shù)據(jù),并將合成后的數(shù)據(jù)依次追加到DOM樹中由SVG腳本創(chuàng)建的id為“window”節(jié)點(diǎn)中;d.如果存在加載動(dòng)畫數(shù)據(jù)的模塊,則還需把動(dòng)畫數(shù)據(jù)準(zhǔn)備好,如果不存在加載動(dòng)畫數(shù)據(jù)的模塊,進(jìn)入下一步;e.放映頁數(shù)據(jù)準(zhǔn)備完成以后,應(yīng)用層接收各種鼠標(biāo)、鍵盤事件,并將事件轉(zhuǎn)為特定的動(dòng)作,調(diào)用播放狀態(tài)管理模塊提供的相應(yīng)功能接口,再由播放狀態(tài)管理模塊根據(jù)動(dòng)作類型和當(dāng)前系統(tǒng)放映狀態(tài)決定調(diào)用哪個(gè)功能模塊以實(shí)現(xiàn)其功能需求,并實(shí)時(shí)更新當(dāng)前系統(tǒng)放映狀態(tài)。
本發(fā)明所述的演示放映方法是通過腳本語言,調(diào)用DOM函數(shù)和SVG DOM函數(shù),響應(yīng)DOM事件,處理SVG數(shù)據(jù)文檔在應(yīng)用程序中對(duì)應(yīng)的DOM樹,控制放映器展現(xiàn)各種復(fù)雜的演示效果。因?yàn)榉庞硵?shù)據(jù)是在放映時(shí)動(dòng)態(tài)生成,所以數(shù)據(jù)獨(dú)立性遠(yuǎn)比靜態(tài)組織的要高,并且靈活性也大大增強(qiáng),同一份原始數(shù)據(jù)根據(jù)不同的設(shè)置可以生成多種放映序列,并且可以利用良好的數(shù)據(jù)定義結(jié)構(gòu)開發(fā)一些諸如動(dòng)態(tài)更改展現(xiàn)外觀的擴(kuò)充功能,使放映效果更加出色。
圖1是本發(fā)明演示放映方法中應(yīng)用層接收的事件與SVG演示放映器中各模塊關(guān)系圖;圖2是本發(fā)明SVG演示放映器中的放映頁數(shù)據(jù)準(zhǔn)備模塊、頁切換模塊和頁內(nèi)動(dòng)畫放映模塊的結(jié)構(gòu)圖;圖3是本發(fā)明SVG演示放映器內(nèi)部模塊間關(guān)系示意圖;圖4是說明本發(fā)明演示放映方法中的頁切換流程圖。
具體實(shí)施例方式
本發(fā)明所述的一種利用SVG演示放映器進(jìn)行演示放映的方法是通過腳本語言,調(diào)用DOM函數(shù)和SVG DOM函數(shù),響應(yīng)DOM事件,處理SVG數(shù)據(jù)文檔在應(yīng)用程序中對(duì)應(yīng)的SVG DOM樹,控制放映器展現(xiàn)各種復(fù)雜的演示效果。所述的腳本語言主要指ECMAScript,也可以是被SVG支持的其它腳本語言。所述方法在邏輯上將系統(tǒng)分為三層應(yīng)用層、邏輯層和數(shù)據(jù)層。
所述數(shù)據(jù)層是SVGViewer將SVG文檔讀入內(nèi)存創(chuàng)建的DOM樹以及被邏輯層加工過的存儲(chǔ)在用SVG腳本在DOM樹中創(chuàng)建的id為“window”的節(jié)點(diǎn)內(nèi)容,所有這些內(nèi)容統(tǒng)稱為數(shù)據(jù)存儲(chǔ)模塊。所述應(yīng)用層主要負(fù)責(zé)事件的接收,以及把接收到的事件分發(fā)給邏輯層的對(duì)應(yīng)模塊,它可以接收的事件包括文檔加載時(shí)觸發(fā)的onload事件,鼠標(biāo)事件(如onclick/onmouseup),鍵盤事件(如onkeyup/onkeydown)。所述邏輯層是本發(fā)明的SVG演示放映器所在層,該SVG演示放映器完成各種事件的響應(yīng)動(dòng)作,與數(shù)據(jù)層進(jìn)行數(shù)據(jù)交互,展示各種復(fù)雜演示效果,參見圖1,其構(gòu)成主要包括放映頁數(shù)據(jù)準(zhǔn)備模塊、頁切換模塊、頁內(nèi)動(dòng)畫放映模塊以及播放狀態(tài)管理模塊,它還可以包括索引頁處理模塊。
整個(gè)系統(tǒng)的運(yùn)行機(jī)制是事件機(jī)制,用戶事件的接收一方面依賴于DOM提供的鼠標(biāo)事件支持,另一方面依賴于Adobe SVGViewer提供的鍵盤事件支持。其處理流程如下參見圖1至圖4,當(dāng)SVG演示數(shù)據(jù)文檔被加載時(shí),利用DOM提供的onload事件,調(diào)用它的響應(yīng)函數(shù),在響應(yīng)函數(shù)中調(diào)用放映頁數(shù)據(jù)準(zhǔn)備模塊提供的接口,準(zhǔn)備放映頁數(shù)據(jù)。如果指定了自定義放映列表名,則讀取指定自定義放映列表的內(nèi)容,否則,以Slide的定義順序作為自定義放映列表內(nèi)容,再通過放映頁數(shù)據(jù)準(zhǔn)備模塊中的靜態(tài)數(shù)據(jù)準(zhǔn)備模塊,根據(jù)列表內(nèi)容,取得指定Slide原始數(shù)據(jù),并根據(jù)該Slide原始數(shù)據(jù)中的一個(gè)特殊標(biāo)識(shí),判斷其與對(duì)應(yīng)Master的關(guān)聯(lián)關(guān)系,在內(nèi)存中將Master數(shù)據(jù)與Slide原始數(shù)據(jù)按照指定的規(guī)則,合成可以直接被SVG播放器顯示的靜態(tài)數(shù)據(jù),并將合成后的數(shù)據(jù)依次追加到DOM樹中由SVG腳本創(chuàng)建的id為“window”節(jié)點(diǎn)中。所述放映頁數(shù)據(jù),其數(shù)據(jù)組成分兩部分,靜態(tài)SVG數(shù)據(jù)和動(dòng)畫SVG數(shù)據(jù),靜態(tài)數(shù)據(jù)必須完全準(zhǔn)備且能直接被SVG播放器顯示,動(dòng)畫數(shù)據(jù)即可以一次性準(zhǔn)備完畢,也可以在后期逐步加入。所述的規(guī)則指如果關(guān)聯(lián)關(guān)系表示忽略母版的背景圖形,則把Slide與Master的關(guān)聯(lián)改為對(duì)Master背景顏色的引用,否則,拷貝母版中所有的Shape到Slide的關(guān)聯(lián)標(biāo)記后Shape定義之前的位置,并將關(guān)聯(lián)標(biāo)記改為忽略母版。最后,如果存在加載動(dòng)畫數(shù)據(jù)的模塊,則還需使用“函數(shù)動(dòng)畫”法把動(dòng)畫數(shù)據(jù)準(zhǔn)備好。其遵循的原則為加載Slide的頁動(dòng)畫數(shù)據(jù)時(shí),當(dāng)指定Slide沒有頁動(dòng)畫數(shù)據(jù)時(shí),會(huì)嘗試加載對(duì)應(yīng)Master的頁切換數(shù)據(jù),而加載頁內(nèi)動(dòng)畫數(shù)據(jù)時(shí),首先判斷當(dāng)前Slide與Master的關(guān)聯(lián)關(guān)系,如果當(dāng)前Slide忽略了對(duì)應(yīng)母版的背景圖形,則只需要按照當(dāng)前頁的動(dòng)畫列表利用“函數(shù)動(dòng)畫”進(jìn)行加載,否則,在加載頁內(nèi)Shape的動(dòng)畫數(shù)據(jù)之前,得先加載對(duì)應(yīng)Mater中Shape的動(dòng)畫數(shù)據(jù)。
放映頁數(shù)據(jù)準(zhǔn)備完成以后,應(yīng)用層接收各種鼠標(biāo)、鍵盤事件,并將事件轉(zhuǎn)為特定的動(dòng)作,調(diào)用播放狀態(tài)管理模塊提供的相應(yīng)功能接口,再由播放狀態(tài)管理模塊根據(jù)動(dòng)作類型和當(dāng)前系統(tǒng)放映狀態(tài)決定調(diào)用哪個(gè)功能模塊以實(shí)現(xiàn)其功能需求,并實(shí)時(shí)更新當(dāng)前系統(tǒng)放映狀態(tài)。參見圖3,播放狀態(tài)管理模塊在處理下一頁、上一頁、跳到指定頁等頁切換動(dòng)作時(shí)相對(duì)比較簡(jiǎn)單,只需轉(zhuǎn)化為對(duì)頁切換模塊的調(diào)用,為它提供關(guān)鍵信息,當(dāng)頁切換模塊調(diào)用完畢,修改當(dāng)前頁索引號(hào)的狀態(tài)值。如果是下一動(dòng)作或是上一動(dòng)作,還需要判斷當(dāng)前頁的頁內(nèi)動(dòng)畫播放狀態(tài),再?zèng)Q定調(diào)用頁切換模塊還是調(diào)用頁內(nèi)動(dòng)畫放映模塊。頁切換模塊除了完成正常的切換頁功能外,如果在放映頁數(shù)據(jù)準(zhǔn)備模塊沒有把動(dòng)畫數(shù)據(jù)一次性準(zhǔn)備完畢,則此處還需要先準(zhǔn)備動(dòng)畫數(shù)據(jù),加載動(dòng)畫數(shù)據(jù)的方法如前所述。
除上述的一些必備模塊以完成放映系統(tǒng)的基本功能外,為了使本放映系統(tǒng)的功能更加強(qiáng)大,還可以有如下一些擴(kuò)充模塊版本校驗(yàn)與版本控制模塊,用于當(dāng)文檔版本與放映器版本不同時(shí)進(jìn)行相應(yīng)處理,以便今后版本(包括數(shù)據(jù)版本和放映器版本)升級(jí)時(shí),能夠向下兼容甚至雙向兼容,如果存在該模塊,則此模塊的啟動(dòng)應(yīng)先于如上所述的任一模塊;自動(dòng)放映模塊,完成演示中展臺(tái)播放功能,并且在任一時(shí)刻,可以由自動(dòng)放映狀態(tài)切換到交互放映狀態(tài)。
導(dǎo)航條模塊,該工具條上可以根據(jù)需要集成任意已經(jīng)實(shí)現(xiàn)的功能按鈕作為功能入口,方便用戶操作。
下面結(jié)合附圖和實(shí)例說明本發(fā)明SVG演示放映方法如圖1所示,整個(gè)放映系統(tǒng)的運(yùn)行都是通過DOM的事件機(jī)制來觸發(fā)的。當(dāng)SVG演示數(shù)據(jù)文檔被加載時(shí),觸發(fā)onload事件,當(dāng)應(yīng)用層偵聽到此事件時(shí),通過調(diào)用它的響應(yīng)函數(shù),也即放映頁數(shù)據(jù)準(zhǔn)備模塊為應(yīng)用層提供的接口,開始準(zhǔn)備放映頁數(shù)據(jù),作為處理SVG文檔的入口。所述放映頁數(shù)據(jù)準(zhǔn)備模塊的結(jié)構(gòu)圖如圖2所示,必須包含靜態(tài)數(shù)據(jù)準(zhǔn)備模塊,還可以包含頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊和頁內(nèi)動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊,但這兩個(gè)子模塊不是必需的,它們也可以全部或部分包含在后述的頁切換模塊中,還可以包含版本控制模塊,便于在以后升級(jí)時(shí),方便版本兼容。如果存在兩個(gè)后面的子模塊,靜態(tài)數(shù)據(jù)準(zhǔn)備模塊必須最先調(diào)用,然后再調(diào)用其它子模塊,該模塊提供了一個(gè)給應(yīng)用層調(diào)用的用于處理當(dāng)重新加載放映內(nèi)容用的接口。該模塊主要完成的功能是初始化放映數(shù)據(jù),并將原始的內(nèi)存DOM樹的數(shù)據(jù)按照指定的原則合成播放數(shù)據(jù)。其中靜態(tài)數(shù)據(jù)準(zhǔn)備模塊完成的主要任務(wù)是獲取當(dāng)前文檔的版本信息,如果將要處理的文檔的版本與放映器的版本不符,則退出系統(tǒng),不執(zhí)行任何操作,否則讀取指定自定義放映列表名的內(nèi)容,按照列表內(nèi)容一一將Master數(shù)據(jù)與Slide數(shù)據(jù)進(jìn)行合成,生成放映頁數(shù)據(jù),舉例如下假設(shè)自定義放映列表的內(nèi)容存放在gSlideElementList數(shù)組里。首先,從該數(shù)組中讀取一個(gè)值,根據(jù)該值從幻燈片頁數(shù)據(jù)定義區(qū)復(fù)制對(duì)應(yīng)的Slide數(shù)據(jù)為SlideCopy,并重新生成SlideCopy的id,假設(shè)原Slide的id為“oldId”,與它關(guān)聯(lián)的Master的id為“mastered”,則新生成的SlideCopy的id為“oldId”+.?(?表示該文檔中不重復(fù)的整數(shù)字,從0開始,依次遞增),如“oldId.0”;然后,使用DOM函數(shù)獲取SlideCopy中id值為“oldId.master”的元素,該id所對(duì)應(yīng)的元素的作用是為Slide與Master建立關(guān)聯(lián),指出該Slide是否忽略對(duì)應(yīng)Master中的背景圖形,為了說明方便,后面簡(jiǎn)稱關(guān)聯(lián)元素。如果該關(guān)聯(lián)元素的xlink:href屬性值為“masterId”,則表示不忽略Master中的背景圖形,否則如果為“masterId.background”,則表示忽略。當(dāng)忽略時(shí),將此關(guān)聯(lián)元素的id改為“oldId.master.ignoreshapes”,否則,將其id改為“masterId.background”,并將masterId中所有的shapes復(fù)制到SlideCopy中。值得注意的是,各Shape的層次關(guān)系是通過它們?cè)跀?shù)據(jù)定義時(shí)的先后順序決定的,所以為了在把Master中的shapes復(fù)制到SlideCopy以后,不會(huì)導(dǎo)致Master中的Shape覆蓋SlideCopy中的Shape,必須將Master中的Shapes復(fù)制到SlideCopy中關(guān)聯(lián)元素的之后,所有Shapes定義之前,這個(gè)操作可以利用DOM提供的insertBefore接口來完成。
最后,將生成的SlideCopy追加到內(nèi)存DOM樹中一個(gè)使用腳本創(chuàng)建的id值為“window”的節(jié)點(diǎn)中,該節(jié)點(diǎn)又被稱為放映區(qū)。
按照上述方法,直至gSlideElementList數(shù)組中所有的值按從前到后的順序都被處理完,至此,所有用于放映的靜態(tài)數(shù)據(jù)準(zhǔn)備完畢。
如果放映頁數(shù)據(jù)準(zhǔn)備模塊中實(shí)現(xiàn)了頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊或頁內(nèi)動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊,則還可以通過這兩個(gè)模塊為靜態(tài)數(shù)據(jù)加載動(dòng)畫數(shù)據(jù),完成放映頁數(shù)據(jù)的準(zhǔn)備工作。在SVG演示數(shù)據(jù)文檔中,動(dòng)畫數(shù)據(jù)的表達(dá)是采用與SVG兼容的XML的形式表達(dá)的,由XML數(shù)據(jù)到SVG播放器可直接處理的動(dòng)畫數(shù)據(jù),這個(gè)過程是通過“函數(shù)動(dòng)畫”法完成的。其中Slide的切換動(dòng)畫加載原則是如果Slide動(dòng)畫數(shù)據(jù)沒有時(shí),會(huì)去嘗試加載對(duì)應(yīng)Master的頁切換數(shù)據(jù)。頁內(nèi)動(dòng)畫的加載原則是如果不忽略母版中的背景圖形,則首先加載對(duì)應(yīng)的母版的Shape的動(dòng)畫數(shù)據(jù),再加載Slide內(nèi)的Shape的動(dòng)畫數(shù)據(jù)。
播放狀態(tài)管理模塊能處理的動(dòng)作有五種上一動(dòng)作,下一動(dòng)作,上一頁,下一頁,跳到指定頁。每當(dāng)有動(dòng)作發(fā)生時(shí),首先分析動(dòng)作類型,再根據(jù)動(dòng)作類型,調(diào)用相應(yīng)的處理模塊,并實(shí)時(shí)更新當(dāng)前的播放狀態(tài),它與其它模塊配合工作的關(guān)系如圖3所示,當(dāng)播放狀態(tài)管理模塊對(duì)動(dòng)作經(jīng)過分析后,如果動(dòng)作是涉及頁切換的,播放狀態(tài)管理模塊則會(huì)調(diào)用頁切換模塊提供的內(nèi)部接口,通知頁切換模塊處理發(fā)生的動(dòng)作,并為頁切換模塊提供關(guān)鍵信息,以便讓頁切換模塊能夠準(zhǔn)確處理對(duì)應(yīng)的動(dòng)作。所述頁切換模塊如圖2所示,前翻頁模塊和后翻頁模塊是必備模塊,分別完成切換到下一頁和切換到上一頁的功能,頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊與頁內(nèi)動(dòng)畫數(shù)據(jù)準(zhǔn)備視放映頁數(shù)據(jù)準(zhǔn)備模塊而定,如果放映頁數(shù)據(jù)準(zhǔn)備模塊已經(jīng)包含了這個(gè)兩個(gè)模塊或是其中的一個(gè),則已被包含的模塊不能作為頁切換模塊的子模塊,沒有被包含的模塊必須做為該模塊的子模塊。當(dāng)頁切換模塊的內(nèi)部接口被調(diào)用后,頁切換模塊被激活,它會(huì)立即對(duì)播放狀態(tài)管理模塊提供的信息進(jìn)行判斷,如果是跳到指定頁,則首先找到指定頁的頁切換動(dòng)畫,然后隱藏當(dāng)前頁,顯示指定頁,并激活頁切換動(dòng)畫,同時(shí),播放狀態(tài)管理模塊同步更新當(dāng)前頁號(hào),完成頁跳轉(zhuǎn)。如果是跳到下一頁或是上一頁,換頁的方法與跳轉(zhuǎn)到指定頁相同,但還要考慮跳轉(zhuǎn)頁是否是隱藏,其具體處理流程如圖4所示,如果所有動(dòng)畫數(shù)據(jù)在放映頁數(shù)據(jù)準(zhǔn)備模塊已經(jīng)被加載,則此處只需要激活頁動(dòng)畫,否則,還需對(duì)幻燈片內(nèi)的圖形對(duì)象的動(dòng)畫進(jìn)行數(shù)據(jù)準(zhǔn)備工作;二是利用DOM函數(shù)控制幻燈片的可見還是不可見(display屬性),這里需要控制兩頁的顯示狀態(tài),這兩頁的顯示狀態(tài)是互斥的,對(duì)于“下一頁”,則使當(dāng)前頁隱藏(display屬性值置為“none”),下一頁顯示(display屬性值置為“inline”),對(duì)于“上一頁”,使當(dāng)前頁隱藏,上一頁顯示。為了說明方便,假設(shè)當(dāng)前頁的索引號(hào)為C,并且把該索引值賦給K。如果是“上一頁”,則首先判斷第K頁是不是首頁,如果是首頁,則不執(zhí)行任何動(dòng)作,直接結(jié)束流程,否則,K值自減1,再判斷第K頁是不是隱藏頁(visibility屬性值為“hidden”),如果是隱藏頁,再判斷它曾經(jīng)是否被播放過,如果從來沒有被播放過,則直接跳過第K頁,使用相同方法重復(fù)上一動(dòng)作;如果不是隱藏頁,則直接顯示第第K頁,隱藏第C頁,即當(dāng)前頁,并判斷第K頁動(dòng)畫數(shù)據(jù)是否已準(zhǔn)備好,在沒有準(zhǔn)備好的情況下,還需要啟用頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊加第K頁的頁動(dòng)畫數(shù)據(jù),最后激活第K頁的頁動(dòng)畫,顯示頁最后一次放映時(shí)的狀態(tài)。如果是“下一頁”,則首先判斷第K頁是不是最后一頁,如果是最后一頁,則不執(zhí)行任何動(dòng)作,直接結(jié)束流程,否則,K值自加1,再判斷第K頁是不是隱藏頁,如果是隱藏頁,則直接跳過第K頁,使用相同方法繼續(xù)判斷下一頁;如果不是隱藏頁,則將第K頁顯示,第C頁隱藏,即當(dāng)前頁隱藏,并調(diào)用頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊,加載第K頁的頁動(dòng)畫數(shù)據(jù),加載方法是如果Slide本身有頁動(dòng)畫,則直接使用第K頁的頁動(dòng)畫,如果第K頁沒有頁動(dòng)畫,則嘗試加載第K頁對(duì)應(yīng)的母版的動(dòng)畫作為第K頁的頁動(dòng)畫,如果頁動(dòng)畫在放映頁數(shù)據(jù)準(zhǔn)備模塊已經(jīng)被加載,則此處只需調(diào)用頁內(nèi)動(dòng)畫函數(shù)為第K頁準(zhǔn)備頁內(nèi)動(dòng)畫,加載方法是首先加載對(duì)應(yīng)母版中具有動(dòng)畫的所有Shape的動(dòng)畫,再加載第K頁中所有具有動(dòng)畫的Shape的動(dòng)畫,如果此處頁內(nèi)動(dòng)畫數(shù)據(jù)也已經(jīng)在放映頁數(shù)據(jù)準(zhǔn)備模塊中準(zhǔn)備好,則直接啟動(dòng)第K頁頁動(dòng)畫。不管是跳到上一頁,還是下一頁,都必須同步更新當(dāng)前播放狀態(tài),即C=K,使當(dāng)前頁號(hào)始終是被顯示的那頁的頁號(hào)。
如果動(dòng)作經(jīng)播放狀態(tài)管理模塊分析后認(rèn)為是頁內(nèi)動(dòng)畫,播放狀態(tài)管理模塊則會(huì)調(diào)用頁內(nèi)動(dòng)畫放映模塊提供的內(nèi)部接口,通知頁內(nèi)動(dòng)畫放映模塊處理發(fā)生的動(dòng)作,并為頁內(nèi)動(dòng)畫放映模塊提供關(guān)鍵信息,以便讓頁內(nèi)動(dòng)畫放映模塊能夠準(zhǔn)確處理對(duì)應(yīng)的動(dòng)作。當(dāng)頁內(nèi)動(dòng)畫放映模塊的內(nèi)部接口被調(diào)用后,立即被激活,根據(jù)接收到的關(guān)鍵信息,決定是放映下一動(dòng)畫還是消隱上一動(dòng)畫。所述的頁內(nèi)動(dòng)畫放映模塊如圖2所示,它包括兩個(gè)模塊動(dòng)畫放映模塊和動(dòng)畫消隱模塊,分別用于處理下一動(dòng)作且頁內(nèi)動(dòng)畫還沒有放映完畢時(shí)的情況和處理上一動(dòng)作且頁內(nèi)動(dòng)畫還沒有回放完畢時(shí)的情況,在進(jìn)行動(dòng)畫放映或動(dòng)畫回放時(shí),還得分為處理事件激發(fā)的動(dòng)畫和跟隨某一動(dòng)畫的動(dòng)畫兩種。
本發(fā)明所述的演示放映方法是通過腳本語言,調(diào)用DOM函數(shù)和SVG DOM函數(shù),響應(yīng)DOM事件,處理SVG數(shù)據(jù)文檔在應(yīng)用程序中對(duì)應(yīng)的DOM樹,控制放映器展現(xiàn)各種復(fù)雜的演示效果。因?yàn)榉庞硵?shù)據(jù)是在放映時(shí)動(dòng)態(tài)生成,所以數(shù)據(jù)獨(dú)立性遠(yuǎn)比靜態(tài)組織的要高,并且靈活性也大大增強(qiáng),同一份原始數(shù)據(jù)根據(jù)不同的設(shè)置可以生成多種放映序列,并且可以利用良好的數(shù)據(jù)定義結(jié)構(gòu)開發(fā)一些諸如動(dòng)態(tài)更改展現(xiàn)外觀的擴(kuò)充功能,使放映效果更加出色。
以上步驟僅用以說明而非限制本發(fā)明的技術(shù)方案。不脫離本發(fā)明精神和范圍的任何修改或局部替換,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種SVG演示放映器,其特征在于,其位于系統(tǒng)邏輯層,其包括播放狀態(tài)管理模塊、放映頁數(shù)據(jù)準(zhǔn)備模塊、頁切換模塊和頁內(nèi)動(dòng)畫放映模塊;該放映頁數(shù)據(jù)準(zhǔn)備模塊包括靜態(tài)數(shù)據(jù)準(zhǔn)備模塊;該頁切換模塊包括后翻頁模塊和前翻頁模塊;該頁內(nèi)動(dòng)畫放映模塊包括動(dòng)畫放映模塊和動(dòng)畫消隱模塊;上述各模塊均有與系統(tǒng)數(shù)據(jù)層進(jìn)行數(shù)據(jù)交換的接口;系統(tǒng)應(yīng)用層可接收鼠標(biāo)和鍵盤事件,同時(shí)把接收的事件分發(fā)給SVG演示放映器中的各模塊。
2.根據(jù)權(quán)利要求1所述的SVG演示放映器,其特征在于,所述系統(tǒng)數(shù)據(jù)層包括SVG解釋器將SVG文檔讀入內(nèi)存創(chuàng)建的DOM樹和被SVG演示放映器加工過的存儲(chǔ)在用SVG腳本在DOM樹中創(chuàng)建的節(jié)點(diǎn)內(nèi)容。
3.根據(jù)權(quán)利要求1所述的SVG演示放映器,其特征在于,其還包括索引頁處理模塊。
4.根據(jù)權(quán)利要求1所述的SVG演示放映器,其特征在于,其還包括版本校驗(yàn)與版本控制模塊。
5.根據(jù)權(quán)利要求1所述的SVG演示放映器,其特征在于,其還包括自動(dòng)放映模塊和導(dǎo)航條模塊。
6.根據(jù)權(quán)利要求1所述的SVG演示放映器,其特征在于,所述放映頁數(shù)據(jù)準(zhǔn)備模塊與頁切換模塊其中之一內(nèi)含有頁動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊和頁內(nèi)動(dòng)畫數(shù)據(jù)準(zhǔn)備模塊。
7.一種使用如權(quán)力要求1所述的SVG演示放映器進(jìn)行演示放映的方法,其特征在于,其包括如下過程a.加載SVG演示數(shù)據(jù)文檔,利用DOM提供的onload事件,調(diào)用它的響應(yīng)函數(shù),在響應(yīng)函數(shù)中調(diào)用放映頁數(shù)據(jù)準(zhǔn)備模塊提供的接口,準(zhǔn)備放映頁數(shù)據(jù);b.判斷是否指定了自定義放映列表,如果是,則讀取自定義放映列表的內(nèi)容,如果否,以Slide的定義順序作為自定義放映列表內(nèi)容;c.通過放映頁數(shù)據(jù)準(zhǔn)備模塊中的靜態(tài)數(shù)據(jù)準(zhǔn)備模塊,根據(jù)列表內(nèi)容,合成可以直接被SVG播放器顯示的靜態(tài)數(shù)據(jù),并將合成后的數(shù)據(jù)依次追加到DOM樹中由SVG腳本創(chuàng)建的節(jié)點(diǎn)中;d.如果存在加載動(dòng)畫數(shù)據(jù)的模塊,則還需把動(dòng)畫數(shù)據(jù)準(zhǔn)備好,如果不存在加載動(dòng)畫數(shù)據(jù)的模塊,進(jìn)入下一步;e.放映頁數(shù)據(jù)準(zhǔn)備完成以后,應(yīng)用層接收各種鼠標(biāo)、鍵盤事件,并將事件轉(zhuǎn)為特定的動(dòng)作,調(diào)用播放狀態(tài)管理模塊提供的相應(yīng)功能接口,再由播放狀態(tài)管理模塊根據(jù)動(dòng)作類型和當(dāng)前系統(tǒng)放映狀態(tài)決定調(diào)用哪個(gè)功能模塊以實(shí)現(xiàn)其功能需求,并實(shí)時(shí)更新當(dāng)前系統(tǒng)放映狀態(tài)。
8.根據(jù)權(quán)利要求7所述的演示放映方法,其特征在于,過程e中所述特定動(dòng)作包括下一頁、上一頁、調(diào)到指定頁等頁切換動(dòng)作和上一動(dòng)作、下一動(dòng)作等。
9.根據(jù)權(quán)利要求7或8所述的演示放映方法,其特征在于,播放狀態(tài)管理模塊在處理下一頁、上一頁、跳到指定頁等頁切換動(dòng)作時(shí),只需轉(zhuǎn)化為對(duì)頁切換模塊的調(diào)用,為它提供關(guān)鍵信息,當(dāng)頁切換模塊調(diào)用完畢,修改當(dāng)前頁索引號(hào)的狀態(tài)值;播放狀態(tài)管理模塊在處理下一動(dòng)作或是上一動(dòng)作時(shí),還需要判斷當(dāng)前頁的頁內(nèi)動(dòng)畫播放狀態(tài),再?zèng)Q定調(diào)用頁切換模塊還是調(diào)用頁內(nèi)動(dòng)畫放映模塊。
10.根據(jù)權(quán)利要求9所述的演示放映方法,其特征在于,頁切換模塊除了完成正常的切換頁功能外,如果過程d中在放映頁數(shù)據(jù)準(zhǔn)備模塊中沒有加載動(dòng)畫數(shù)據(jù)的模塊,則此處還需要先準(zhǔn)備動(dòng)畫數(shù)據(jù),并加載動(dòng)畫數(shù)據(jù)。
全文摘要
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及一種演示放映器和使用該演示放映器的演示放映方法。一種SVG演示放映器,其位于系統(tǒng)邏輯層,其包括播放狀態(tài)管理模塊、放映頁數(shù)據(jù)準(zhǔn)備模塊、頁切換模塊和頁內(nèi)動(dòng)畫放映模塊;該放映頁數(shù)據(jù)準(zhǔn)備模塊包括靜態(tài)數(shù)據(jù)準(zhǔn)備模塊;該頁切換模塊包括后翻頁模塊和前翻頁模塊;該頁內(nèi)動(dòng)畫放映模塊包括動(dòng)畫放映模塊和動(dòng)畫消隱模塊;上述各模塊均有與系統(tǒng)數(shù)據(jù)層進(jìn)行數(shù)據(jù)交換的接口;系統(tǒng)應(yīng)用層可接收鼠標(biāo)和鍵盤事件,同時(shí)把接收的事件分發(fā)給SVG演示放映器中的各模塊。本發(fā)明所述的演示放映器可以使放映效果更加出色。
文檔編號(hào)G06F17/30GK101017488SQ20061003351
公開日2007年8月15日 申請(qǐng)日期2006年2月10日 優(yōu)先權(quán)日2006年2月10日
發(fā)明者萬里, 曾崴, 熊玉輝, 賀利軍 申請(qǐng)人:珠海金山軟件股份有限公司