🧱 木疙瘩 · 脚本指南 全局 · 页脚本 · API 速查

⚡ 全局脚本 → 页1 → 页2… 📦 变量隔离 · 挂在 mugedawindow 🧩 pageIndex 可直接使用 🎯 三层 API: mugeda · scene · aObject
📌 脚本运行顺序 & 变量隔离 基础

执行顺序: 全局脚本 → 页1脚本 → 页2脚本 … (按页面顺序)

变量隔离: 全局与页脚本变量不互通。如需通讯,挂在 mugedawindow 对象上。

页脚本内: 可直接使用 pageIndex (整数,当前页号)。

// 全局脚本中挂载变量 window.sharedData = { count: 0 }; mugeda.globalVal = 'hello'; // 页脚本中读取 console.log(window.sharedData.count, mugeda.globalVal); console.log('当前页号:', pageIndex); // 直接使用
🎬 mugeda 对象 · 动画入口 顶层

每个动画对应一个 mugeda 对象。脚本中已注入,直接使用。

📦 获取方式 (嵌入网页)
// 1️⃣ 动画加载前 document.addEventListener('mugedaReady', function() { var mugeda = window['Mugeda']['currentAni']; console.log(mugeda.title); }); // 2️⃣ 动画加载后 var mugeda = window['Mugeda']['currentAni']; // 多动画遍历 window['Mugeda']['animations'].forEach(function(ani) { if (ani.title === '我的动画') { /* 使用 ani */ } });

mugeda 包含总体信息:titlewidthheight 等。

⏳ scene 对象 · 时间轴 & 播放控制 核心

每个时间轴 (主舞台 / 元件实例) 对应一个 scene

📌 获取 scene
// 主舞台 mugeda.addEventListener('renderready', function() { var scene = mugeda.scene; }); // 元件实例 (命名为 "A") mugeda.addEventListener('renderready', function() { var scene = mugeda.scene; var symScene = scene.getObjectByName('A').scene; });
📊 常用属性
currentId 当前帧号 (整数)
currentDecimalId 小数帧号
currentPageIndex 当前页号 (元件为0)
playing 是否播放中
pages 页数据数组
dom 对应 DOM 元素
💡 currentId 说明: 从 0 开始,比 IDE 时间轴数字小 1。多页时连续累加,如两页各10帧,第一页 [0,10),第二页 [10,20)。
🎯 播放控制方法
scene.pause(); // 暂停 scene.play(); // 继续 scene.gotoAndPlay(15); // 跳转并播放 (帧号/帧名) scene.gotoAndPause('标记', 1); // 跳转到第2页的“标记”帧并暂停 scene.nextPage(); // 下一页 scene.prevPage(); // 上一页 scene.gotoPage(2); // 跳转到第3页 scene.gotoPage(2, { transition: 'fadein', duration: 600 });
翻页效果 options: transition: 'Ladder' | 'cover' | 'appear' | 'fadein' | 'box' | 'flip'
exit: 'none' | 'zoomout' | 'fadeout' | 'box' | 'flip' 等。duration 毫秒 ≥1。
📌 片段播放
scene.setSegment('片段1', 0, 15, true); // 循环 scene.setSegment('片段2', 16, 30, false); scene.playSegment('片段2');
🧩 获取命名帧
var frameId = scene.getFrameidByName('开始录音');
📡 enterframe 事件
scene.addEventListener('enterframe', function() { console.log(this.currentId); // this → scene });
🧩 aObject · 动画元素操控 核心

每个可见元素 (图片、文字、组、元件实例) 对应 aObject

📌 获取 aObject
// 通过名称 (在 scene 中唯一) var aObj = scene.getObjectByName('myText'); // 克隆 var clone = aObj.clone(); // 从元件创建实例 var instance = mugeda.createInstanceOfSymbol('元件1'); scene.appendChild(instance);
⚙️ 常用可读写属性
x, y 参考点坐标
left, top, right, bottom 边界
width, height 尺寸
rotate 旋转 (弧度)
scaleX, scaleY 缩放
alpha 透明度
visible 可见性
text 文本内容
url 链接目标
rotateX, rotateY 空间旋转
pers 透视角度
dom DOM 元素
变换顺序: 移动 (x,y) → 缩放 (scaleX/scaleY) → 旋转Y → 旋转X → 旋转Z (rotate) → 透视 (pers)
👁️ visible & 生命周期

visible 与时间轴生命周期共同决定可见性。生命周期外不可见,生命周期内由 visible 控制。

🖱️ 事件绑定 (鼠标/触摸)
aObj.addEventListener('click', function(e) { console.log(e.inputX, e.inputY); // 舞台坐标 e.stopPropagation(); }); // 支持: touchstart, mousedown, click, dblclick, mouseover, blur, focus // 以及 inputstart, inputmove, inputend (PC mouse / 移动 touch)
🔧 高级:操作 DOM
// 使文本可编辑 var dom = aObj.dom; dom.setAttribute('contentEditable', 'true'); // 动态插入 textarea 到组 var text = '<textarea style="width:100%;height:100%;"></textarea>'; var node = document.createElement('div'); node.innerHTML = text; scene.getObjectByName('textG').dom.appendChild(node.firstChild);
🔍 物体遍历 & 增删 容器操作
// 通过名字查找 (主舞台或元件内) var symA = scene.getObjectByName('A'); var symAScene = symA.scene; var objectB = symAScene.getObjectByName('B'); // 反遍历 (子→父) console.log(symAScene.object === symA); // true console.log(symAScene.parentScene === scene); // true console.log(symAScene.thisAni === mugeda); // true // 增删物体 var newObj = mugeda.createInstanceOfSymbol('元件1'); scene.appendChild(newObj); scene.removeChild(newObj);
📌 提示: aObject.currentScene 可获取物体所在的 scene。
✏️ 常用示例 上手
// 设置文本 mugeda.addEventListener('renderready', function() { var scene = mugeda.scene; var txt = scene.getObjectByName('A'); txt.text = '123'; }); // 获取当前帧号 (enterframe) scene.addEventListener('enterframe', function() { console.log('帧号:', this.currentId); }); // 跳转到第3页并播放 scene.gotoPage(2); // 改变透明度 & 旋转 var obj = scene.getObjectByName('box'); obj.alpha = 0.7; obj.rotate = Math.PI / 4;