Skip to content

Instantly share code, notes, and snippets.

@UskeS
Created July 17, 2025 08:20
Show Gist options
  • Select an option

  • Save UskeS/9085effdc5aafb3cfbda50f202e28fe1 to your computer and use it in GitHub Desktop.

Select an option

Save UskeS/9085effdc5aafb3cfbda50f202e28fe1 to your computer and use it in GitHub Desktop.
[InDesign] Sort by Stacking Order - 重なり順でオブジェクトをソート
/**
* ページ上のオブジェクトを重なり順でソートする関数
* @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