Created
July 17, 2025 08:20
-
-
Save UskeS/9085effdc5aafb3cfbda50f202e28fe1 to your computer and use it in GitHub Desktop.
[InDesign] Sort by Stacking Order - 重なり順でオブジェクトをソート
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * ページ上のオブジェクトを重なり順でソートする関数 | |
| * @param {Array} objects - ソートするオブジェクトの配列 | |
| * @param {Boolean} [fromTop] - true: 上から順(デフォルト)、false: 下から順。省略可 | |
| * @returns {Array} ソートされたオブジェクトの配列 | |
| */ | |
| function sortByStackingOrder(objects, fromTop) { | |
| // 第二引数のデフォルト値設定 | |
| if (fromTop === undefined) { | |
| fromTop = true; | |
| } | |
| // 引数チェック | |
| if (!objects || !objects.length) { | |
| return []; | |
| } | |
| // オブジェクトの重なり順を取得する関数 | |
| function getStackingOrder(obj) { | |
| try { | |
| // PageItemのindexプロパティを使用して重なり順を取得 | |
| // indexは0から始まり、値が小さいほど前面(上)にある | |
| return obj.index; | |
| } catch (e) { | |
| // エラーの場合は最背面として扱う | |
| return Number.MAX_VALUE; | |
| } | |
| } | |
| // オブジェクトの配列をコピーしてソート | |
| var sortedObjects = objects.slice(); | |
| sortedObjects.sort(function (a, b) { | |
| var indexA = getStackingOrder(a); | |
| var indexB = getStackingOrder(b); | |
| if (fromTop) { | |
| // 上から順:indexの小さい順(前面から背面へ) | |
| return indexA - indexB; | |
| } else { | |
| // 下から順:indexの大きい順(背面から前面へ) | |
| return indexB - indexA; | |
| } | |
| }); | |
| return sortedObjects; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment