//AE可停靠UI的一种实现方案 v1.0.0 2021-08-16
//© Raymond Yan 2021 (RaymondClr@outlook.com / QQ: 1107677019)

//重定向this为全局环境,因为ScriptUI的center()方法无法在非全局环境下运行,call只是为了解决这个问题。
scriptName.call(this, buildUiElements, initUiElements);

function scriptName(bulildUiElementsCallBack, initUiElementsCallBack) {
    //获取脚本运行时的上下文(如果在ScriptUI Panels文件夹下运行返回true)
    var thisInGlobalIsPanel = this instanceof Panel;

    //如果没有在ScriptUI Panels文件夹下运行,就新建一个palette充当主面板。
    //palette中的resizeable属性决定可面板是否可以被拖动,true代表可以。
    var mainPanel = thisInGlobalIsPanel ? this : new Window('palette', undefined, undefined, { resizeable: true });

    //绑定UI调整(用户拖动窗口大小会刷新布局)事件
    mainPanel.onResize = function () {
        this.layout.resize();
    };

    //水平垂直居中UI根元素,当然也可以有其它参数,比如top、left、right等(这句甚至可以不写,看个人需求),详参文档。
    mainPanel.alignChildren = ['center', 'center'];

    //两个回调分别用于向主面板添加元素和初始化元素
    initUiElementsCallBack(bulildUiElementsCallBack(mainPanel));

    //如果脚本处于ScriptUI Panels文件夹下,显式调用布局管理器。
    //如果脚本处于ScriptUI Panels文件夹下,从Window菜单调用脚本时,AE自动调用了show()方法,所以没必要再来一遍,直接return就好。
    if (thisInGlobalIsPanel) return mainPanel.layout.layout(true);

    //UI根元素居中
    mainPanel.center();

    //在AE中显示
    mainPanel.show();
}

//构建UI元素
function buildUiElements(mainPanel) {
    //加个组,组里放两按钮,顺便return这个组,供初始化UI的时候用。
    return mainPanel.add(
        'Group { \
            A: Button{ }, \
            B: Button{ } \
        } '
    );
}

//初始化UI元素
function initUiElements(mainGroup) {

    //把按钮排成一列,不写这句默认就是按行排。
    mainGroup.orientation = 'column';

    var button1 = mainGroup.A;
    var button2 = mainGroup.B;
    button1.text = '按钮一';
    button2.text = '按钮二';

    //绑定子元素事件
    button1.onClick = sayName;
    button2.onClick = sayName;
}

function sayName() {
    alert('我是' + this.text);
}

您的电子邮箱地址不会被公开。 必填项已用*标注

评论(1)

请下载到本地观看!因为pdf是用的阿里云盘预览,可能部分字体加载不了。

请安装油猴脚本,并下载月离的万事屋脚本。详情请查看菜单 导航 - 用户指引

请在右上角三个点 - 下载管理 - 找到刚才的文件,选择允许下载。 或者换个浏览器