Photoshop脚本多if语句仅执行首个真值语句问题求助
问题分析与解决方案
首先明确:这绝对不是JavaScript的特性——JS里独立的if语句只要条件为真就会依次执行,你遇到的问题是因为第一个if块里的操作直接修改了图层的尺寸和位置,导致后续if的判断条件不再成立了。
看你的代码细节:第一个if里执行了translate()和resizeBCenter(),这两个操作会实时改变当前图层的位置(比如layerBottom的数值)和尺寸(layerWidth的数值),而第二个if的判断完全依赖这些被修改后的变量。所以第一次运行时,第一个条件满足并执行后,图层状态已经变化,第二个条件自然不再成立;第二次运行时,图层是第一次修改后的状态,第一个条件可能不再触发,第二个条件才会生效。
要实现所有符合原始图层状态的条件都被执行,核心思路是:先把所有判断需要的变量值提前保存下来,基于图层的初始状态完成所有条件判断,再执行对应的操作。
修改后的代码示例:
// 第一步:提前保存所有原始状态的变量值,避免后续操作修改判断依据 const originalLayerSmaller = layerSmaller; const originalLayerLeftIn = layerLeftIn; const originalLayerRightIn = layerRightIn; const originalLayerTopIn = layerTopIn; const originalLayerBottomOut = layerBottomOut; const originalLayerWidth = layerWidth; const originalDocWidth = docWidth; const originalLayerTopOut = layerTopOut; const originalLayerBottomOut = layerBottomOut; const originalLayerLeftOut = layerLeftOut; const originalRmargin = Rmargin; const originalDocHeight = docHeight; const originalLayerHeight = layerHeight; // 基于原始状态判断第一个条件并执行 if (originalLayerSmaller && originalLayerLeftIn && originalLayerRightIn && originalLayerTopIn && originalLayerBottomOut) { activeDocument.activeLayer.translate(0, originalDocHeight - originalLayerBottom + 2); const percentageChange = ((originalDocHeight / originalLayerHeight) * 101); resizeBCenter(percentageChange); } // 基于原始状态判断第二个条件并执行 if (originalLayerWidth <= originalDocWidth && originalLayerTopOut && originalLayerBottomOut && originalLayerLeftOut && originalLayerRightIn && originalRmargin >= 65) { const percentageChange = ((originalDocWidth / originalLayerWidth) * 101); resizeTLeft(percentageChange); app.activeDocument.selection.selectAll(); align('AdCH'); align('AdCV'); app.activeDocument.selection.deselect(); }
补充提示:
如果你的resizeBCenter或resizeTLeft这类自定义函数会切换当前活动图层,记得在操作前用变量保存当前活动图层,操作后再切回来,避免后续代码误操作其他图层。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

