本文编写“起始”按钮被触发时的事件。
“起始”按钮触发逻辑图
详细代码 onBtn1Click()
下面会贴出完整的代码,详细的注解会在//
中给出。如果需要回顾其他章节的函数或者理解更深入,可以参考本套教程附加的文档:
以及官方文档(结合文末的参考页码查阅):
- JavaScript Tools Guide CC.pdf
- After Effects CS6 Scripting Guide.pdf
{
// LK字幕生成工具(LK Subtitle Generator)
function LK_SubtitleGenerator(thisObj)
{
...
function onBtn1Click() {
// 主要目标:创建本条字幕的开始时间
// 检查文本内容是否为空:
// 当存在时赋予本条字幕内容并增加编号;若不存在则弹出警告并中止后面的操作
content = edt.text; // 获取编辑框中的文本
if (content == "") { // 文本为空,弹出警告
alert("Please input some contents", "Warning");
} else { // 文本存在,继续
// 接下来我们从一条字幕被“生产”出来的角度来理解期间经过了什么变化
// 首先,新建一条字幕,编号+1
id += 1;
// 如果id是个位数,为了看起来整齐一些,对它进行补零操作:01, 02, 03...
if (id < 10) {
item = listbox.add('item','0' + id);
} else {
item = listbox.add('item', id);
}
// 获取当前时间并赋值给`start`列
s = app.project.item(INDEX).time; // 获取该合成视频的当前时间
// ↑ 假设我们的时间位于视频大约30s处,其格式为“30.1134467801134”
s = timeToCurrentFormat(s, FPS); // 对时间进行转制并应用static帧速率
// ↑ 将时间转换成“00:00:30:02”的形式
item.subItems[0].text = s; // 当前字幕的第一子列(也就是`start`列)显示时间
item.subItems[2].text = content; // 第三子列(也就是`content`列)显示文本
// 列表滚动到底部
listbox.revealItem(item);
//item.selected = true;
// 接下来判断上一条字幕的“结束时间”是否为空
// 若为空则将当前开始时间赋给上条字幕的结束时间
if (id > 1 && last_time == '') {
last_item.subItems[1].text = s;
}
// 记得文字上屏后要把编辑框内的文字清空
edt.text = "";
// 记录此次操作的item和time,以供后续回调
last_item = item;
last_time = item.subItems[1].text;
}
}
...
}
LK_SubtitleGenerator(this); // 执行该函数
}
实际效果图如下,可以看到所有字幕的“end”列都被下一字幕的“start”列数据填上了:
下章链接:06 创建本条字幕的结束时间