在簡報中使用 JavaScript 套用形狀動畫
簡介
動畫是可套用於文字、圖像、形狀或圖表的視覺效果。它們為簡報或其組成部分賦予活力。
為何在簡報中使用動畫?
使用動畫,您可以
- 控制資訊的流向
- 強調重要重點
- 增加觀眾的興趣或參與度
- 讓內容更容易閱讀、吸收或處理
- 吸引讀者或觀眾的注意力至簡報中的重要部分
PowerPoint 提供許多選項與工具,讓您在進入、退出、強調和移動路徑類別中設定動畫與動畫效果。
Aspose.Slides 中的動畫
- Aspose.Slides 在
Aspose.Slides.Animation命名空間下提供您使用動畫所需的類別與類型, - Aspose.Slides 於EffectType 列舉中提供超過 150 種動畫效果。這些效果實質上與 PowerPoint 中使用的效果相同(或等效)。
將動畫套用至文字方塊
Aspose.Slides for Node.js via Java 允許您將動畫套用至形狀內的文字。
- 建立 Presentation 類別的實例。
- 透過索引取得投影片參考。
- 新增一個
rectangleAutoShape。 - 使用 AutoShape.addTextFrame 新增文字。
- 取得主要效果序列。
- 為 AutoShape 新增動畫效果。
- 使用
BuildType列舉的值呼叫TextAnimation.setBuildType方法。 - 將簡報寫入磁碟,以 PPTX 檔案儲存。
以下 JavaScript 程式碼示範如何將 Fade 效果套用至 AutoShape,並將文字動畫設定為 By 1st Level Paragraphs:
// 實例化一個代表簡報檔案的簡報類別。
var pres = new aspose.slides.Presentation();
try {
var sld = pres.getSlides().get_Item(0);
// 新增帶有文字的 AutoShape
var autoShape = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 20, 20, 150, 100);
var textFrame = autoShape.getTextFrame();
textFrame.setText("First paragraph \nSecond paragraph \n Third paragraph");
// 取得投影片的主要序列。
var sequence = sld.getTimeline().getMainSequence();
// 為形狀新增淡入動畫效果
var effect = sequence.addEffect(autoShape, aspose.slides.EffectType.Fade, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.OnClick);
// 依第一層段落為形狀文字設定動畫
effect.getTextAnimation().setBuildType(aspose.slides.BuildType.ByLevelParagraphs1);
// 將 PPTX 檔案儲存至磁碟
pres.save(path + "AnimText_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
將動畫套用至圖片框
- 建立 Presentation 類別的實例。
- 透過索引取得投影片參考。
- 在投影片上新增或取得 PictureFrame。
- 取得主要效果序列。
- 為 PictureFrame 新增動畫效果。
- 將簡報寫入磁碟,以 PPTX 檔案儲存。
以下 JavaScript 程式碼示範如何將 Fly 效果套用至圖片框:
// 實例化一個代表簡報檔案的簡報類別。
var pres = new aspose.slides.Presentation();
try {
// 載入要加入簡報影像集合的圖像
var picture;
var image = aspose.slides.Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) {
image.dispose();
}
}
// 新增圖片框至投影片
var picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 100, 100, picture);
// 取得投影片的主要序列。
var sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// 為圖片框新增從左側飛入的動畫效果
var effect = sequence.addEffect(picFrame, aspose.slides.EffectType.Fly, aspose.slides.EffectSubtype.Left, aspose.slides.EffectTriggerType.OnClick);
// 將 PPTX 檔案儲存至磁碟
pres.save(path + "AnimImage_out.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
將動畫套用至形狀
- 建立 Presentation 類別的實例。
- 透過索引取得投影片參考。
- 新增一個
rectangleAutoShape。 - 新增一個
BevelAutoShape(點擊此物件時會播放動畫)。 - 為斜角形狀建立效果序列。
- 建立自訂的
UserPath。 - 為
UserPath新增移動指令。 - 將簡報寫入磁碟,以 PPTX 檔案儲存。
以下 JavaScript 程式碼示範如何將 PathFootball(路徑足球)效果套用至形狀:
// 實例化一個代表 PPTX 檔案的 Presentation 類別。
var pres = new aspose.slides.Presentation();
try {
var sld = pres.getSlides().get_Item(0);
// 為現有形狀從頭建立 PathFootball 效果。
var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 250, 25);
ashp.addTextFrame("Animated TextBox");
// 新增 PathFootBall 動畫效果
pres.getSlides().get_Item(0).getTimeline().getMainSequence().addEffect(ashp, aspose.slides.EffectType.PathFootball, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.AfterPrevious);
// 建立某種「按鈕」。
var shapeTrigger = pres.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Bevel, 10, 10, 20, 20);
// 為此按鈕建立效果序列。
var seqInter = pres.getSlides().get_Item(0).getTimeline().getInteractiveSequences().add(shapeTrigger);
// 建立自訂使用者路徑。只有在按鈕被點擊後,我們的物件才會移動。
var fxUserPath = seqInter.addEffect(ashp, aspose.slides.EffectType.PathUser, aspose.slides.EffectSubtype.None, aspose.slides.EffectTriggerType.OnClick);
// 為移動新增指令,因為建立的路徑目前是空的。
var motionBhv = fxUserPath.getBehaviors().get_Item(0);
var pts = java.newArray("com.aspose.slides.Point2DFloat", [java.newInstanceSync("com.aspose.slides.Point2DFloat", 0.076, 0.59)]);
motionBhv.getPath().add(aspose.slides.MotionCommandPathType.LineTo, pts, aspose.slides.MotionPathPointsType.Auto, true);
pts[0] = java.newInstanceSync("com.aspose.slides.Point2DFloat", java.newFloat(-0.076), java.newFloat(-0.59));
motionBhv.getPath().add(aspose.slides.MotionCommandPathType.LineTo, pts, aspose.slides.MotionPathPointsType.Auto, false);
motionBhv.getPath().add(aspose.slides.MotionCommandPathType.End, null, aspose.slides.MotionPathPointsType.Auto, false);
// 將 PPTX 檔案寫入磁碟
pres.save("AnimExample_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
取得套用於形狀的動畫效果
下列範例示範如何使用 Sequence 類別的 getEffectsByShape 方法,取得套用於形狀的所有動畫效果。
範例 1:取得普通投影片上形狀的動畫效果
先前您已了解如何在 PowerPoint 簡報中為形狀加入動畫效果。下列範例程式碼示範如何取得簡報 AnimExample_out.pptx 中第一張普通投影片之第一個形狀所套用的效果。
var presentation = new aspose.slides.Presentation("AnimExample_out.pptx");
try {
var firstSlide = presentation.getSlides().get_Item(0);
// 取得投影片的主要動畫序列。
var sequence = firstSlide.getTimeline().getMainSequence();
// 取得第一張投影片上的第一個形狀。
var shape = firstSlide.getShapes().get_Item(0);
// 取得套用於該形狀的動畫效果。
var shapeEffects = sequence.getEffectsByShape(shape);
if (shapeEffects.length > 0) {
console.log("The shape", shape.getName(), "has", shapeEffects.length, "animation effects.");
}
} finally {
if (presentation != null) {
presentation.dispose();
}
}
範例 2:取得所有動畫效果,包括從占位符繼承的效果
如果普通投影片上的形狀有占位符,而這些占位符位於版面投影片和/或母片投影片,且對這些占位符已加入動畫效果,則在投影片播放時,形狀會播放所有效果,包括從占位符繼承的效果。
假設我們有一個 PowerPoint 簡報檔 sample.pptx,其中唯一一張投影片只包含一個頁腳形狀,文字為「Made with Aspose.Slides」,且已套用 Random Bars 效果。

再假設 Split 效果已套用於 版面 投影片上的頁腳占位符。

最後,Fly In 效果已套用於 母片 投影片上的頁腳占位符。

以下範例程式碼示範如何使用 Shape 類別的 getBasePlaceholder 方法,存取形狀占位符,並取得套用於頁腳形狀的動畫效果,包括從版面與母片投影片的占位符繼承的效果。
var presentation = new aspose.slides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
// Get animation effects of the shape on the normal slide.
var shape = slide.getShapes().get_Item(0);
var shapeEffects = slide.getTimeline().getMainSequence().getEffectsByShape(shape);
// Get animation effects of the placeholder on the layout slide.
var layoutShape = shape.getBasePlaceholder();
var layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);
// Get animation effects of the placeholder on the master slide.
var masterShape = layoutShape.getBasePlaceholder();
var masterShapeEffects = slide.getLayoutSlide().getMasterSlide().getTimeline().getMainSequence().getEffectsByShape(masterShape);
console.log("Main sequence of shape effects:");
printEffects(masterShapeEffects);
printEffects(layoutShapeEffects);
printEffects(shapeEffects);
presentation.dispose();
function printEffects(effects) {
for (const effect of effects) {
console.log("Type:", effect.getType() + ", subtype:", effect.getSubtype());
}
}
輸出:
Main sequence of shape effects:
Type: 47, subtype: 2 // 飛入, 底部
Type: 134, subtype: 45 // 分割, 垂直進入
Type: 126, subtype: 22 // 隨機條, 水平
變更動畫效果的時間屬性
Aspose.Slides for Node.js via Java 允許您變更動畫效果的時間屬性。
這是 Microsoft PowerPoint 中的動畫時間窗格:

以下是 PowerPoint 時間與 Effect.Timing 屬性之間的對應:
- PowerPoint 時間 Start 下拉選單對應到 Effect.Timing.TriggerType 屬性。
- PowerPoint 時間 Duration 對應到 Effect.Timing.Duration 屬性。動畫的持續時間(秒)為動畫完成一次循環所需的總時間。
- PowerPoint 時間 Delay 對應到 Effect.Timing.TriggerDelayTime 屬性。
以下說明如何變更 Effect Timing 屬性:
- 套用或取得動畫效果。
- 為您需要的 Effect.Timing 屬性設定新值。
- 儲存已修改的 PPTX 檔案。
以下 JavaScript 程式碼示範此操作:
// 實例化一個代表簡報檔案的簡報類別。
var pres = new aspose.slides.Presentation("AnimExample_out.pptx");
try {
// 取得投影片的主要序列。
var sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// 取得主要序列的第一個效果。
var effect = sequence.get_Item(0);
// 將效果的 TriggerType 變更為點擊時開始
effect.getTiming().setTriggerType(aspose.slides.EffectTriggerType.OnClick);
// 變更效果的持續時間
effect.getTiming().setDuration(3.0);
// 變更效果的 TriggerDelayTime
effect.getTiming().setTriggerDelayTime(0.5);
// 將 PPTX 檔案儲存至磁碟
pres.save("AnimExample_changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
動畫效果音效
Aspose.Slides 提供以下屬性,讓您在動畫效果中使用音效:
新增動畫效果音效
以下 JavaScript 程式碼示範如何新增動畫效果音效,並在下一個效果開始時停止該音效:
var pres = new aspose.slides.Presentation("AnimExample_out.pptx");
try {
// 將音訊加入簡報的音訊集合
var effectSound = pres.getAudios().addAudio(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "sampleaudio.wav")));
var firstSlide = pres.getSlides().get_Item(0);
// 取得投影片的主要序列。
var sequence = firstSlide.getTimeline().getMainSequence();
// 取得主要序列的第一個效果
var firstEffect = sequence.get_Item(0);
// 檢查效果是否為「無聲」
if ((!firstEffect.getStopPreviousSound()) && (firstEffect.getSound() == null)) {
// 為第一個效果新增音效
firstEffect.setSound(effectSound);
}
// 取得投影片的第一個互動序列。
var interactiveSequence = firstSlide.getTimeline().getInteractiveSequences().get_Item(0);
// 設定效果的「停止先前音效」旗標
interactiveSequence.get_Item(0).setStopPreviousSound(true);
// 將 PPTX 檔案寫入磁碟
pres.save("AnimExample_Sound_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
擷取動畫效果音效
- 建立 Presentation 類別的實例。
- 透過索引取得投影片參考。
- 取得主要效果序列。
- 擷取每個動畫效果所嵌入的 setSound(IAudio value)。
以下 JavaScript 程式碼示範如何擷取嵌入於動畫效果中的音效:
// 實例化一個代表簡報檔案的簡報類別。
var presentation = new aspose.slides.Presentation("EffectSound.pptx");
try {
var slide = presentation.getSlides().get_Item(0);
// 取得投影片的主要序列。
var sequence = slide.getTimeline().getMainSequence();
for (var i = 0; i < sequence.getCount(); i++) {
var effect = sequence.get_Item(i);
if (effect.getSound() == null) {
continue;
}
// 抽取效果音訊為位元組陣列
var audio = effect.getSound().getBinaryData();
}
} finally {
if (presentation != null) {
presentation.dispose();
}
}
動畫結束後的設定
Aspose.Slides for Node.js via Java 允許您變更動畫效果的「After animation」屬性。
這是 Microsoft PowerPoint 中的動畫效果窗格與延伸功能表:

PowerPoint 「After animation」下拉選單對應以下屬性:
- setAfterAnimationType(int value) 方法,可描述 After animation 類型;
- PowerPoint More Colors 對應 AfterAnimationType.Color 類型;
- PowerPoint Don’t Dim 項目對應 AfterAnimationType.DoNotDim 類型(預設 After animation 類型);
- PowerPoint Hide After Animation 項目對應 AfterAnimationType.HideAfterAnimation 類型;
- PowerPoint Hide on Next Mouse Click 項目對應 AfterAnimationType.HideOnNextMouseClick 類型;
- setAfterAnimationColor(IColorFormat value) 方法,可定義 After animation 的顏色格式。此方法需配合 AfterAnimationType.Color 類型使用。如將類型變更為其他,則會清除 After animation 顏色。
以下 JavaScript 程式碼示範如何變更 After animation 效果:
// 實例化一個代表簡報檔案的簡報類別
var pres = new aspose.slides.Presentation("AnimImage_out.pptx");
try {
var firstSlide = pres.getSlides().get_Item(0);
// 取得主要序列的第一個效果
var firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// 將 After animation 類型變更為顏色
firstEffect.setAfterAnimationType(aspose.slides.AfterAnimationType.Color);
// 設定 After animation 的暗淡顏色
firstEffect.getAfterAnimationColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLUE"));
// 將 PPTX 檔案寫入磁碟
pres.save("AnimImage_AfterAnimation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
動畫文字
Aspose.Slides 提供以下屬性,讓您使用動畫效果的 Animate text 區塊:
- setAnimateTextType(int value) 可描述效果的動畫文字類型。形狀文字可依以下方式動畫化:
- 全部一次顯示(AnimateTextType.AllAtOnce 類型)
- 依字詞(AnimateTextType.ByWord 類型)
- 依字母(AnimateTextType.ByLetter 類型)
- setDelayBetweenTextParts(float value) 設定動畫文字部件(字詞或字母)之間的延遲。正值表示效果持續時間的百分比;負值表示以秒為單位的延遲。
以下說明如何變更 Effect Animate text 屬性:
- 套用或取得動畫效果。
- 將 setBuildType(int value) 方法設定為 BuildType.AsOneObject 值,以關閉 By Paragraphs 動畫模式。
- 為 setAnimateTextType(int value) 與 setDelayBetweenTextParts(float value) 屬性設定新值。
- 儲存已修改的 PPTX 檔案。
以下 JavaScript 程式碼示範此操作:
// 實例化一個代表簡報檔案的簡報類別。
var pres = new aspose.slides.Presentation("AnimTextBox_out.pptx");
try {
var firstSlide = pres.getSlides().get_Item(0);
// 取得主要序列的第一個效果
var firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// 將效果的文字動畫類型變更為「作為單一物件」
firstEffect.getTextAnimation().setBuildType(aspose.slides.BuildType.AsOneObject);
// 將效果的動畫文字類型變更為「依字詞」
firstEffect.setAnimateTextType(aspose.slides.AnimateTextType.ByWord);
// 設定字詞之間的延遲為效果持續時間的 20%
firstEffect.setDelayBetweenTextParts(20.0);
// 將 PPTX 檔案寫入磁碟
pres.save("AnimTextBox_AnimateText.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
常見問題
如何確保在將簡報發布至網站時保留動畫?
匯出為 HTML5 並啟用負責形狀與轉場動畫的選項。純 HTML 無法播放投影片動畫,而 HTML5 可以。
變更形狀的 Z 序(圖層順序)會如何影響動畫?
動畫與繪圖順序是獨立的:效果控制出現/消失的時機與類型,而 z-order 決定哪個覆蓋哪個。最終可見結果取決於兩者的組合。(這是一般 PowerPoint 的行為;Aspose.Slides 的效果與形狀模型遵循相同邏輯。)
在將動畫轉換為影片時,某些效果是否有限制?
一般而言,動畫受到支援,但極少數情況或特定效果可能會以不同方式呈現。建議使用您實際使用的效果以及目前的函式庫版本進行測試。