Skip to content

Commit 86c5aaf

Browse files
manucorporatadamdbradley
authored andcommitted
perf(menu): several improvements
- `display: none;` when menu is closed - `ion-backdrop` is display: none when it is not used - `ion-backdrop` is much smaller
1 parent ba53a23 commit 86c5aaf

File tree

6 files changed

+56
-38
lines changed

6 files changed

+56
-38
lines changed

src/components/menu/menu.ios.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ $menu-ios-box-shadow-color: rgba(0, 0, 0, .25) !default;
88
$menu-ios-box-shadow: 0 0 10px $menu-ios-box-shadow-color !default;
99

1010

11-
ion-menu {
11+
.menu-inner {
1212
background: $menu-ios-background;
1313
}
1414

@@ -20,6 +20,6 @@ ion-menu {
2020
box-shadow: $menu-ios-box-shadow;
2121
}
2222

23-
ion-menu[type=overlay] {
23+
ion-menu[type=overlay] .menu-inner {
2424
box-shadow: $menu-ios-box-shadow;
2525
}

src/components/menu/menu.md.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ $menu-md-box-shadow-color: rgba(0, 0, 0, .25) !default;
88
$menu-md-box-shadow: 0 0 10px $menu-md-box-shadow-color !default;
99

1010

11-
ion-menu {
11+
.menu-inner {
1212
background: $menu-md-background;
1313
}
1414

@@ -20,6 +20,6 @@ ion-menu {
2020
box-shadow: $menu-md-box-shadow;
2121
}
2222

23-
ion-menu[type=overlay] {
23+
ion-menu[type=overlay] .menu-inner {
2424
box-shadow: $menu-md-box-shadow;
2525
}

src/components/menu/menu.scss

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ $menu-small-width: $menu-width - 40px !default;
88

99

1010
ion-menu {
11+
position: absolute;
12+
top: 0;
13+
right: 0;
14+
bottom: 0;
15+
left: 0;
16+
17+
display: none;
18+
19+
&.show-menu {
20+
display: block;
21+
}
22+
}
23+
24+
25+
.menu-inner {
1126
position: absolute;
1227
top: 0;
1328
right: auto;
@@ -23,20 +38,22 @@ ion-menu {
2338
transform: translate3d(-9999px, 0, 0);
2439
}
2540

26-
ion-menu > ion-header,
27-
ion-menu > ion-content,
28-
ion-menu > ion-footer {
41+
.menu-inner > ion-header,
42+
.menu-inner > ion-content,
43+
.menu-inner > ion-footer {
2944
position: relative;
3045
}
3146

32-
ion-menu[side=right] {
47+
ion-menu[side=right] > .menu-inner {
3348
right: 0;
3449
left: auto;
3550
}
3651

3752
ion-menu ion-backdrop {
3853
z-index: -1;
3954
display: none;
55+
56+
opacity: .1;
4057
}
4158

4259
.menu-content {
@@ -54,7 +71,7 @@ ion-menu ion-backdrop {
5471

5572
@media (max-width: 340px) {
5673

57-
ion-menu {
74+
.menu-inner {
5875
width: $menu-small-width;
5976
}
6077

@@ -66,7 +83,11 @@ ion-menu ion-backdrop {
6683
// The content slides over to reveal the menu underneath.
6784
// The menu itself, which is under the content, does not move.
6885

69-
ion-menu[type=reveal].show-menu {
86+
ion-menu[type=reveal] {
87+
z-index: 0;
88+
}
89+
90+
ion-menu[type=reveal].show-menu .menu-inner {
7091
transform: translate3d(0, 0, 0);
7192
}
7293

@@ -79,17 +100,7 @@ ion-menu[type=reveal].show-menu {
79100
ion-menu[type=overlay] {
80101
z-index: $z-index-menu-overlay;
81102

82-
ion-backdrop {
83-
left: -3000px;
103+
.show-backdrop {
84104
display: block;
85-
86-
width: 6000px;
87-
88-
opacity: .01;
89-
transform: translate3d(-9999px, 0, 0);
90-
91-
&.show-backdrop {
92-
transform: translate3d(0, 0, 0);
93-
}
94105
}
95106
}

src/components/menu/menu.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,14 @@ import { GestureController } from '../../gestures/gesture-controller';
181181
'role': 'navigation'
182182
},
183183
template: `
184-
<ng-content></ng-content>
184+
<div class="menu-inner"><ng-content></ng-content></div>
185185
<ion-backdrop (click)="bdClick($event)" disableScroll="false"></ion-backdrop>
186186
`,
187187
directives: [Backdrop],
188188
changeDetection: ChangeDetectionStrategy.OnPush,
189189
encapsulation: ViewEncapsulation.None,
190190
})
191-
export class Menu extends Ion {
191+
export class Menu {
192192
private _preventTime: number = 0;
193193
private _cntEle: HTMLElement;
194194
private _cntGesture: MenuContentGesture;
@@ -303,9 +303,7 @@ export class Menu extends Ion {
303303
private _keyboard: Keyboard,
304304
private _zone: NgZone,
305305
public gestureCtrl: GestureController
306-
) {
307-
super(_elementRef);
308-
}
306+
) { }
309307

310308
/**
311309
* @private
@@ -576,11 +574,15 @@ export class Menu extends Ion {
576574
return this;
577575
}
578576

577+
getNativeElement(): HTMLElement {
578+
return this._elementRef.nativeElement;
579+
}
580+
579581
/**
580582
* @private
581583
*/
582584
getMenuElement(): HTMLElement {
583-
return this.getNativeElement();
585+
return <HTMLElement>this.getNativeElement().querySelector('.menu-inner');
584586
}
585587

586588
/**
@@ -597,6 +599,10 @@ export class Menu extends Ion {
597599
return this.backdrop.getNativeElement();
598600
}
599601

602+
width(): number {
603+
return this.getMenuElement().offsetWidth;
604+
}
605+
600606
/**
601607
* @private
602608
*/

src/components/menu/menu.wp.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
$menu-wp-background: #f2f2f2 !default;
77

88

9-
ion-menu {
9+
.menu-inner {
1010
background: $menu-wp-background;
1111
}

src/gestures/slide-gesture.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,22 @@ export class SlideGesture extends PanGesture {
4949
}
5050

5151
onDragMove(ev: any) {
52+
let slide = this.slide;
5253
let coord = <any>pointerCoord(ev);
5354
let newPos = coord[this.direction];
5455
let newTimestamp = Date.now();
55-
let velocity = (newPos - this.slide.pos) / (newTimestamp - this.slide.timestamp);
56+
let velocity = (newPos - slide.pos) / (newTimestamp - slide.timestamp);
5657

57-
this.slide.pos = newPos;
58-
this.slide.timestamp = newTimestamp;
59-
this.slide.distance = clamp(
60-
this.slide.min,
61-
newPos - this.slide.pointerStartPos + this.slide.elementStartPos,
62-
this.slide.max
58+
slide.pos = newPos;
59+
slide.timestamp = newTimestamp;
60+
slide.distance = clamp(
61+
slide.min,
62+
newPos - slide.pointerStartPos + slide.elementStartPos,
63+
slide.max
6364
);
64-
this.slide.velocity = velocity;
65-
this.slide.delta = newPos - this.slide.pointerStartPos;
66-
this.onSlide(this.slide, ev);
65+
slide.velocity = velocity;
66+
slide.delta = newPos - slide.pointerStartPos;
67+
this.onSlide(slide, ev);
6768

6869
return true;
6970
}

0 commit comments

Comments
 (0)