-
[AE脚本开发]事件监听 鼠标篇
姊妹篇: 事件监听 按键篇 var myButton = new Window("palette", "我的按钮"); myButton.button = myButton.add("button", undefined, "单击我"); // 监听右键菜单事件 myButton.button.addEventListener("mousedown", clickHandler); // 鼠标左键是 0 中间滚轮是 1 右键 是2 function clickHandler(event) { if (event.button == 0) { alert("点了左键") } if (event.button == 1) { alert("滚轮") } if (event.button == 2) { alert("点了右键") } } myButton.show();- 0
- 0
- 383
-
【AE脚本示例】ScriptUI通过radioButton切换面板组
//ScriptUI通过radioButton切换面板组 v1.0 2022-04-20 //Raymond Yan 2022 (RaymondClr@outlook.com / QQ: 1107677019) var mainWindow = new Window("palette", undefined, undefined, { resizeable: true }); mainWindow.onResizing = function () { this.layout.resize(); }; mainWindow.preferredSize = [300, 200]; mainWindow.alignChildren = ["fill", "top"]; var group1 = mainWindow.add("group"); var group2 = mainWindow.add("group"); group1.alignChildren = ["center", "top"]; var radioButton1 = group1.add("radiobutton", undefined, "A"); var radioButton2 = group1.add("radiobutton", undefined, "B"); var radioButton3 = group1.add("radiobutton", undefined, "C"); var radioButton4 = group1.add("radiobutton", undefined, "D"); group2.orientation = "stack"; group2.alignChildren = group2.parent.alignChildren; var group3 = group2.add("group"); var group4 = group2.add("group"); var group5 = group2.add("group"); var group6 = group2.add("group"); group3.alignChildren = group3.parent.alignChildren; group4.alignChildren = group4.parent.alignChildren; group5.alignChildren = group5.parent.alignChildren; group6.alignChildren = group6.parent.alignChildren; group3.add("listbox", undefined, ["1", "2", "3", "4"]); group4.orientation = "column"; group4.add("checkbox", undefined, "enabled"); group4.add("checkbox", undefined, "enabled"); group4.add("checkbox", undefined, "enabled"); group4.add("button", undefined, "Click1"); group5.add("button", undefined, "Click2"); group6.add("button", undefined, "Click3"); mainWindow.show(); function handleEvent() { group3.visible = radioButton1.value; group4.visible = radioButton2.value; group5.visible = radioButton3.value; group6.visible = radioButton4.value; } (function initGroupState() { radioButton1.value = true; handleEvent(); })(); radioButton4.onClick = radioButton3.onClick = radioButton2.onClick = radioButton1.onClick = handleEvent;- 0
- 0
- 389
-
【事件监听】键盘按键监控源码
/** * 名称:检测键盘状态,并弹出按键名称 * source:https://www.youtube.com/watch?v=UBqdWdDmvao * web:https://www.yuelili.com/?p=18460 **/ var window = new Window("palette", "", undefined); var text = window.add("statictext", undefined, "Detect keyboard input"); window.center(); window.show(); var inUI = true; function inside() { inUI = true; } function outside() { inUI = false; } window.addEventListener('mouseover', inside); window.addEventListener('mouseout', outside); window.addEventListener('keydown', alertKey); function alertKey() { var myKeyState = ScriptUI.environment.keyboardState; var pressedString = myKeyState.keyName; if (myKeyState.altKey) { pressedString = "Alt + " + pressedString; } if (myKeyState.ctrlKey) { pressedString = "Ctrl + " + pressedString; } if (myKeyState.shiftKey) { pressedString = "Shift + " + pressedString; } if (myKeyState.keyName == "F" && myKeyState.shiftKey == true) { alert("You pressed Shift + F"); } if (myKeyState.keyName) { alert("You pressed " + pressedString); } }- 0
- 0
- 227
-
【脚本UI】列表搜索框
截图 使用方法 自己设置下列表,输入关键词,如果列表包含这个词,就显示。其他函数自己绑 代码 //UI 主界面 var w = new Window('dialog {text: "快速搜索", alignChildren: "fill"}'); var text_edit = w.add('edittext {active: true}'); // 定义listbox数组 var myArr = ['bat', 'bear', 'beaver', 'bee', 'cat', 'cats and dogs', 'dog', 'maggot', 'moose', 'moth', 'mouse'] var list = w.add('listbox', [0, 0, 150, 250], myArr); w.add('button', undefined, 'Ok', { name: 'ok' }); // 初始选择第一项(可以不加) list.selection = 0; // 文本编辑内容更改函数 text_edit.onChanging = function () { // 记住文本编辑框的内容 var text_temp = text_edit.text; // 需要先把子项全部删除 list.removeAll(); // 遍历,查找复合条件的子项 for (var i = 0; i < myArr.length; i++) { // 如果当前输入内容在列表内,则新增 if (myArr[i].toLowerCase().indexOf(text_temp) >= 0) { list.add('item', myArr[i]); } } // 如果有内容,则选择第一项(可以不加) if (list.items.length > 0) { list.selection = 0; } } w.show();- 0
- 0
- 281
-
【脚本示例】显示器坐标
来源:显示坐标 $.screens 然后,您可以获取连接的显示器的坐标。 $.screens.toSource() 看了内容, [ ({left:0, top:0, right:1920, bottom:1080, primary:true, toString:(function(){ return this.left+':'+this.top+'-'+this.right+':' +this.bottom;})}), ({left:1920, top:0, right:3840, bottom:1080, primary:false, toString:(function(){ return this.left+':'+this.top+'-'+this.right+':' +this.bottom;})}), ({left:-1080, top:0, right:0, bottom:1920, primary:false, toString:(function(){ return this.left+':'+this.top+'-'+this.right+': '+this.bottom;})}) ] 返回与显示数量相同长度的数组。数组的元素是Object(({~})的部分是一个对象),其属性如下。 左、上、右、下:原样。左、上、右、下坐标值。 主要:主显示为真。其余都是假的。 toString:左、上、右、下的字符串化 成像时,它看起来像这样 似乎 Windows 监视器编号和数组的顺序并不总是匹配。 从脚本中显示一个窗口时,如果要在上一个窗口位置显示,基本上是保存Window Object的位置,在显示时插入该位置。但是,当监视器的数量或排列发生变化时,位置值可能会离开屏幕。然后窗口将显示在视线之外。所以,在这种情况下,你应该使用这个 $ .screen 来检查它是否显示在可见部分。如果超出显示范围,请使用 WindowObject.center() 或其他方法将其带到您可以看到的地方。- 0
- 0
- 235
-
【事件监听】按键监听与按键表 | 键盘按键
姊妹篇: 事件监听 鼠标篇 示例 示例1:对话框级别监听按键。创建一个窗口,当我按ESC时,会把该窗口关闭。 var w = new Window('palette{ margins : 0 , spacing : 2 , properties : {},\ lb : ListBox{ alignment : ["fill","fill"] , preferredSize : [200,-1] , properties : { items : ["menu1","menu2","menu3"] } }\ }'); w.addEventListener("keydown", function (e) { if (e.keyName == "Escape") this.close(); }); w.show(); 注:[sc name="keyword" ]keydown[/sc]是按键按下。 示例2:控件级别检测按键。单击按钮的同时,按住shift键 var dialog = new Window("dialog"); dialog.text = "Dialog"; var button1 = dialog.add("button", undefined, undefined, { name: "button1" }); button1.text = "按钮"; button1.onClick = btn_click function btn_click() { if (ScriptUI.environment.keyboardState.shiftKey === true) { // 执行按住shift后要执行的函数代码 alert("现在按住了shift") } } dialog.show(); 参考文章 JS 工具文档事件监听 JS按键事件与按键表 按键表 KEY NAME EVENT.WHICH EVENT.KEY EVENT.CODE NOTES backspace 8 Backspace Backspace tab 9 Tab Tab enter 13 Enter Enter shift(left) 16 Shift ShiftLeft event.shiftKey is true shift(right) 16 Shift ShiftRight event.shiftKey is true ctrl(left) 17 Control ControlLeft event.ctrlKey is true ctrl(right) 17 Control ControlRight event.ctrlKey is true alt(left) 18 Alt AltLeft event.altKey is true alt(right) 18 Alt AltRight event.altKey is true pause/break 19 Pause Pause caps lock 20 CapsLock CapsLock escape 27 Escape Escape space 32 Space The event.key value is a single space. page up 33 PageUp PageUp page down 34 PageDown PageDown end 35 End End home 36 Home Home left arrow 37 ArrowLeft ArrowLeft up arrow 38…- 0
- 0
- 243
-
监听冲突(优化)
// 熊猫 var res = palette { orientation:'row', \ A: DropDownList { properties:{items:['A','B','C','D','E','F','G']} }, \ B: DropDownList { properties:{items:['A','B','C','D','E','F','G']} }, \ }; var win = new Window (res); win.show(); var L = win.A; L.selection = 0; var R = win.B; R.selection = 1; function A() { return 0 } function B() { return 0 } //========================错误的实现========================== L.onChange = function () {var i = this.selection.index; R.selection = B(); this.selection = i} R.onChange = function () {var i = this.selection.index; L.selection = A(); this.selection = i} //============================================================ //目前的问题:L绑定了监听,R绑定了监听,L值发生改变会使R的值发生改变,R值的改变又会触发R的监听,导致L的值被改变,反之亦然。 //期望的结果:L发生改变时,R的值发生改变,但不触发R的监听(或不执行相应的处理程序)。R发生改变时,L的值发生改变,但不触发R的监听(或不执行相应的处理程序)。 /*=======================一种解决方案========================= var change = false; function pass() { change ? change = false : change = true; } L.onChange = function () { pass(); if(change) R.selection = B(); pass();} R.onChange = function () { pass(); if(change) L.selection = A(); pass();} //===========================================================*/- 0
- 0
- 138
-
按钮自动换行
var palette = (this instanceof Panel) ? panelGlobal : new Window("palette", undefined, undefined, { resizeable: true }); palette.text = "Panel"; palette.orientation = "column"; palette.preferredSize.width = 500; palette.preferredSize.height = 300; buttomnum = 24; //按钮数量 //创建30个尺寸50x50的按钮 var btn = new Array(); for (var b = 1; b <= buttomnum; b++) { btn[b] = palette.add("button", undefined, undefined); btn[b].preferredSize.width = 50; btn[b].preferredSize.height = 50; btn[b].text = b; } var buttomSpace = 10;//按钮间隔 var btnX = btn[1].preferredSize.width + buttomSpace;//一个按钮摆放宽度 var btnY = btn[1].preferredSize.height + buttomSpace;//一个按钮摆放高度 palette.onResizing = palette.onResize = function () { var buttonsPerRow = Math.floor(palette.size.width / btnX); //计算界面宽度下一行最多可以放下的按钮数量 if (buttonsPerRow > buttomnum) { buttonsPerRow = buttomnum; } // 左边多余间距(用来按钮居中) var letfSpace = (palette.size.width - buttonsPerRow * btnX + buttomSpace) / 2 for (var c = 0; c < buttomnum; c++) { if (buttonsPerRow < 2) { //判断界面大小,如果宽度小于2个按钮,则按一列排,中间无间隔 btn[c + 1].location = [0, c * 50]; btn[c + 1].size.width = palette.size.width; btn[c + 1].size.height = 50; } else if (buttonsPerRow >= buttomnum) { // 如果界面能容纳所有按钮, 则一行排列, 并且无间隔 palette.size.height = btnY btn[c + 1].location = [(palette.size.width / buttonsPerRow) * c, 0]; btn[c + 1].size.height = 50; btn[c + 1].size.width = (palette.size.width / buttonsPerRow); } else { // 如果界面宽度大于2个按钮,则按上述排列,按钮大小50x50 for (var b = 1; b <= buttomnum;…- 0
- 0
- 260
-
ScriptUI垂直居中CheckBox的四种方法
//方法一 var win = new Window ( palette { \ A: Group { \ A: Checkbox { size: [14, 14] }, \ B: EditText { }, \ C: Button { } \ } \ } ); win.show(); //方法二 var win = new Window ( palette { \ A: Group { \ A: Group { margins: [0, 7, 0, 0], \ A: Checkbox { } \ }, \ B: EditText { }, \ C: Button { } \ } \ } ); win.show(); //方法三 var win = new Window ( palette { \ A: Group { \ A: Checkbox { }, \ B: EditText { }, \ C: Button { } \ } \ } ); win.show(); win.A.A.location = [0,7]; //方法四 var win = new Window ( palette { \ A: Group { \ A: Checkbox { bounds: [0, 7, 14, 21] }, \ B: EditText { }, \ C: Button { } \ } \ } ); win.show();- 0
- 0
- 198
-
多按钮事件闭包解决方案
var win = new Window( palette { \ A: Button { text: '0' }, \ B: Button { text: '1' }, \ C: Button { text: '2' }, \ D: Button { text: '3' }, \ E: Button { text: '4' }, \ F: Button { text: '5' }, \ G: Button { text: '6' }, \ H: Button { text: '7' }, \ I: Button { text: '8' }, \ J: Button { text: '9' } \ } ); win.show(); function attachButtonsEvent(index) { return function () { alert(index); }; } for (var i = 0, l = win.children.length; i < l; i++) { win.children[i].onClick = attachButtonsEvent(i); }- 0
- 0
- 124