07 删除字幕操作

版权声明:本文为博主原创文章,转载请保留原作者名和原文链接。 https://blog.csdn.net/Likianta/article/details/79341199

本文的基本操作是非常简单的,只需将选择的字幕删除即可。难点在于如何对删除后的列表编号重新排序。

“删除”按钮触发逻辑图

基本删除操作 onBtn3Click()

下面会贴出完整的代码,详细的注解会在//中给出。

如需回顾其他章节的函数或者理解更深入,可以参考本套教程附加的文档:
- LK脚本开发相关语法参考
- Adobe脚本代码书写规范

以及官方文档(结合文末的参考页码查阅):
- JavaScript Tools Guide CC.pdf
- After Effects CS6 Scripting Guide.pdf

{
    // LK Subtitle Generator.jsx
    // LK字幕生成工具

    function LK_SubtitleGenerator(thisObj)
    {
        ...

        function onBtn3Click() {
            // 删除被选中的字幕
            s = listbox.selection; // 获得当前被选中的字幕,如果没有选择任何字幕,则返回一个`null`

            if (s != null) { // 判断是不是null,是的话要予以提醒
                listbox.remove(s);
            } else { // 予以提醒:“请先选好一个列表项”
                alert('Please choose any listItem first', 'Tip');
            }
        }

        ...
    }

    LK_SubtitleGenerator(this);
}

改进:在删除后对列表编号重新排序

假设我们一共有5条字幕,现在删除第3条,则变化情况为:

listbox.items[i] 删除前 删除后
items[0] 01 01
items[1] 02 02
items[2] 03 04
items[3] 04 05
items[4] 05

因此onBtn3Click完整代码如下:

{
    // LK Subtitle Generator.jsx
    // LK字幕生成工具

    function LK_SubtitleGenerator(thisObj)
    {
        ...

        function onBtn3Click() {
            // 删除被选中的字幕

            s = listbox.selection; // 获得当前被选中的字幕,如果没有选择任何字幕,则返回一个`null`
            var m = s.text; // 获取待删项的编号,注意一定要在删除之前获取,另外需要注意的是假如它是个位数,那么它的形式是“03”而不是“3”
            var n = id; // 获取删除前的id值(此值也就相当于删除前的字幕总条数)

            if (s != null) {
                listbox.remove(s);
            } else {
                alert('Please choose any listItem first', 'Prompt');
            }

            if (m == n) { // 如果`m = n`,则说明删除的是最后一项,所以只需要将id值-1即可
                id -= 1;
            } else {
                for (id = m * 1; m <= id < n; id++) { // 这里之所以定义`id=m*1`,是因为m的形式是“03”(字符串类型),因此我们要对它转成数字“3”
                    // 个位数需要进行补零操作:01, 02, 03...
                    if (id < 10) {
                        listbox.items[id-1].text = '0' + id;
                    } else {
                        listbox.items[id-1].text = id;
                    }
                }
                // 记录此次操作的item和time(略),以供后续回调
                last_item = listbox.items[id-1];

                // 强制激活listbox,使编号立即被显示
                s = listbox.add('item', '');
                listbox.remove(s);
            }
        }

        ...
    }

    LK_SubtitleGenerator(this);
}

运行效果图

为了节省演示时间,我把清空edt的操作暂时删去了:

下章链接:08 生成字幕图层


参考

  • JavaScript Tools Guide CC
    • selection - p139
    • remove item - p145

猜你喜欢

转载自blog.csdn.net/Likianta/article/details/79341199
07