@@ -274,7 +274,10 @@ export class RenderingService {
274
274
internalRenderSingleDisplayObject ( currentObject ) ;
275
275
276
276
// recursive rendering its children
277
- const objects = currentObject . sortable . sorted || currentObject . childNodes ;
277
+ const objects =
278
+ currentObject . sortable ?. sorted ?. length > 0
279
+ ? currentObject . sortable . sorted
280
+ : currentObject . childNodes ;
278
281
for ( let i = objects . length - 1 ; i >= 0 ; i -- ) {
279
282
stack . push ( objects [ i ] as unknown as DisplayObject ) ;
280
283
}
@@ -288,26 +291,38 @@ export class RenderingService {
288
291
) {
289
292
// avoid re-sorting the whole children list
290
293
sortable . dirtyChildren . forEach ( ( child ) => {
294
+ // remove from sorted list
295
+ const sortIndex = sortable . sorted . indexOf ( child ) ;
296
+ if ( sortIndex > - 1 ) {
297
+ sortable . sorted . splice ( sortIndex , 1 ) ;
298
+ }
299
+
291
300
const index = displayObject . childNodes . indexOf ( child as IChildNode ) ;
292
- if ( index === - 1 ) {
293
- // remove from sorted list
294
- const index = sortable . sorted . indexOf ( child ) ;
295
- if ( index >= 0 ) {
296
- sortable . sorted . splice ( index , 1 ) ;
301
+ if ( index > - 1 ) {
302
+ if ( sortable . sorted . length === 0 ) {
303
+ sortable . sorted . push ( child ) ;
304
+ } else {
305
+ const index = sortedIndex (
306
+ sortable . sorted as IElement [ ] ,
307
+ child as IElement ,
308
+ ) ;
309
+ sortable . sorted . splice ( index , 0 , child ) ;
297
310
}
298
- } else if ( sortable . sorted . length === 0 ) {
299
- sortable . sorted . push ( child ) ;
300
- } else {
301
- const index = sortedIndex (
302
- sortable . sorted as IElement [ ] ,
303
- child as IElement ,
304
- ) ;
305
- sortable . sorted . splice ( index , 0 , child ) ;
306
311
}
307
312
} ) ;
308
313
} else {
309
314
sortable . sorted = displayObject . childNodes . slice ( ) . sort ( sortByZIndex ) ;
310
315
}
316
+
317
+ // When the child elements are changed and sorted, if there are no more stacked elements in the child elements (i.e. zIndex != 0), clear the sort list
318
+ if (
319
+ sortable . sorted ?. length > 0 &&
320
+ displayObject . childNodes . filter (
321
+ ( child : IElement ) => child . parsedStyle . zIndex ,
322
+ ) . length === 0
323
+ ) {
324
+ sortable . sorted = [ ] ;
325
+ }
311
326
}
312
327
313
328
destroy ( ) {
0 commit comments