Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit b1fe81c

Browse files
feat(#15): trigger events when slides is dragged or changed
1 parent f22b9ce commit b1fe81c

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

doc/features/extra.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ The [DeckDeckGo] deck expose a couple of extra features which could be added to
77
- [Extra features](#extra-features)
88
- [Toggle on/off the full screen mode](#toggle-onoff-the-full-screen-mode)
99
- [Print the presentation](#print-the-presentation)
10+
- [Extra events](#extra-events)
1011

1112
## Extra features
1213

@@ -30,4 +31,15 @@ await deck.toggleFullScreen();
3031
await deck.print();
3132
```
3233

34+
## Extra events
35+
36+
[DeckDeckGo] triggers the following events:
37+
38+
| Event | Emitted value | Description |
39+
| -------------------------- |:-----------------:|:-----------------:|
40+
| slideNextStart | number | Emitted when the next slide has started. Emit the index of the new active slide. |
41+
| slidePrevStart | number | Emitted when the previous slide has ended. Emit the index of the new active slide. |
42+
| slideDrag | number | Emitted when the slider is actively being moved. Emit the transformX value of the deck. |
43+
| slideWillChange | number | Emitted before the active slide has changed. Emit the transformX value of the deck. |
44+
3345
[DeckDeckGo]: https://deckdeckgo.com

src/components.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ export namespace Components {
2828
}
2929
interface DeckgoDeckAttributes extends StencilHTMLAttributes {
3030
'keyboard'?: boolean;
31+
'onSlideDrag'?: (event: CustomEvent<number>) => void;
32+
'onSlideNextStart'?: (event: CustomEvent<number>) => void;
33+
'onSlidePrevStart'?: (event: CustomEvent<number>) => void;
34+
'onSlideWillChange'?: (event: CustomEvent<number>) => void;
3135
'pager'?: boolean;
3236
'pagerPercentage'?: boolean;
3337
}

src/components/deck/deckdeckgo-deck/deckdeckgo-deck.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, Element, Listen, Method, Prop, State} from '@stencil/core';
1+
import {Component, Element, Listen, Method, Prop, State, Event, EventEmitter} from '@stencil/core';
22

33
import {DeckDeckGoUtils} from '../../utils/deckdeckgo-utils';
44

@@ -34,6 +34,11 @@ export class DeckdeckgoDeck {
3434
@State()
3535
private length: number = 0;
3636

37+
@Event() slideNextStart: EventEmitter<number>;
38+
@Event() slidePrevStart: EventEmitter<number>;
39+
@Event() slideDrag: EventEmitter<number>;
40+
@Event() slideWillChange: EventEmitter<number>;
41+
3742
async componentDidLoad() {
3843
this.initWindowResize();
3944
this.initKeyboardAssist();
@@ -132,6 +137,8 @@ export class DeckdeckgoDeck {
132137

133138
deltaX.slider.style.setProperty('--transformX', transformX + 'px');
134139
deltaX.slider.style.setProperty('--transformXDuration', '0ms');
140+
141+
this.slideDrag.emit(transformX);
135142
}
136143

137144
private async stop(e: Event) {
@@ -165,8 +172,12 @@ export class DeckdeckgoDeck {
165172

166173
if (deltaX.swipeLeft) {
167174
this.activeIndex++;
175+
176+
this.slideNextStart.emit(this.activeIndex);
168177
} else {
169178
this.activeIndex--;
179+
180+
this.slidePrevStart.emit(this.activeIndex);
170181
}
171182
}
172183
}
@@ -185,6 +196,8 @@ export class DeckdeckgoDeck {
185196
slider.style.setProperty('--transformX', this.deckTranslateX + 'px');
186197
slider.style.setProperty('--transformXDuration', '' + (!isNaN(speed) ? speed : 300) + 'ms');
187198

199+
this.slideWillChange.emit(this.deckTranslateX);
200+
188201
this.startX = null;
189202

190203
resolve();

0 commit comments

Comments
 (0)