Skip to content

Commit 26441ec

Browse files
committed
perf(reorder): reorder icon is display: none by default
references #7651
1 parent bac9b81 commit 26441ec

File tree

4 files changed

+39
-16
lines changed

4 files changed

+39
-16
lines changed

src/components/item/item-reorder.scss

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// --------------------------------------------------
55

66
ion-reorder {
7-
display: flex;
7+
display: none;
88

99
flex: 1;
1010
align-items: center;
@@ -28,10 +28,12 @@ ion-reorder {
2828
}
2929
}
3030

31-
.reorder-enabled {
32-
ion-reorder {
33-
transform: translate3d(0, 0, 0);
34-
}
31+
.reorder-enabled ion-reorder {
32+
display: flex;
33+
}
34+
35+
.reorder-visible ion-reorder {
36+
transform: translate3d(0, 0, 0);
3537
}
3638

3739
.reorder-list-active {

src/components/item/item-reorder.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Component, Directive, ElementRef, EventEmitter, forwardRef, Input, NgZone, Renderer, Inject, Optional, Output } from '@angular/core';
22

33
import { Content } from '../content/content';
4-
import { CSS } from '../../util/dom';
4+
import { CSS, zoneRafFrames } from '../../util/dom';
55
import { Item } from './item';
66
import { ItemReorderGesture } from '../item/item-reorder-gesture';
77
import { isTrueProperty } from '../../util/util';
@@ -128,10 +128,13 @@ export interface ReorderIndexes {
128128
selector: 'ion-list[reorder],ion-item-group[reorder]',
129129
host: {
130130
'[class.reorder-enabled]': '_enableReorder',
131+
'[class.reorder-visible]': '_visibleReorder',
132+
131133
}
132134
})
133135
export class ItemReorder {
134136
private _enableReorder: boolean = false;
137+
private _visibleReorder: boolean = false;
135138
private _reorderGesture: ItemReorderGesture;
136139
private _lastToIndex: number = -1;
137140
private _element: HTMLElement;
@@ -166,15 +169,21 @@ export class ItemReorder {
166169
return this._enableReorder;
167170
}
168171
set reorder(val: boolean) {
169-
this._enableReorder = isTrueProperty(val);
172+
let enabled = isTrueProperty(val);
170173

171-
if (!this._enableReorder) {
172-
this._reorderGesture && this._reorderGesture.destroy();
174+
if (!enabled && this._reorderGesture) {
175+
this._reorderGesture.destroy();
173176
this._reorderGesture = null;
174177

175-
} else if (!this._reorderGesture) {
178+
this._visibleReorder = false;
179+
setTimeout(() => this._enableReorder = false, 400);
180+
181+
} else if (enabled && !this._reorderGesture) {
176182
console.debug('enableReorderItems');
177183
this._reorderGesture = new ItemReorderGesture(this);
184+
185+
this._enableReorder = true;
186+
zoneRafFrames(2, () => this._visibleReorder = true);
178187
}
179188
}
180189

src/util/dom.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ export function rafFrames(framesToWait: number, callback: Function) {
4949
}
5050
}
5151

52+
// TODO: DRY rafFrames and zoneRafFrames
53+
export function zoneRafFrames(framesToWait: number, callback: Function) {
54+
framesToWait = Math.ceil(framesToWait);
55+
56+
if (framesToWait < 2) {
57+
raf(callback);
58+
59+
} else {
60+
setTimeout(() => {
61+
raf(callback);
62+
}, (framesToWait - 1) * 16.6667);
63+
}
64+
}
65+
5266
export let CSS: {
5367
transform?: string,
5468
transition?: string,

src/util/keyboard.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Injectable, NgZone } from '@angular/core';
22

33
import { Config } from '../config/config';
44
import { Form } from './form';
5-
import { hasFocusedTextInput, nativeRaf, rafFrames, nativeTimeout } from './dom';
5+
import { hasFocusedTextInput, nativeRaf, zoneRafFrames, nativeTimeout } from './dom';
66
import { Key } from './key';
77

88
/**
@@ -86,11 +86,9 @@ export class Keyboard {
8686
function checkKeyboard() {
8787
console.debug('keyboard isOpen', self.isOpen());
8888
if (!self.isOpen() || checks > pollingChecksMax) {
89-
rafFrames(30, () => {
90-
self._zone.run(() => {
91-
console.debug('keyboard closed');
92-
callback();
93-
});
89+
zoneRafFrames(30, () => {
90+
console.debug('keyboard closed');
91+
callback();
9492
});
9593

9694
} else {

0 commit comments

Comments
 (0)