'slidechanged' event, added Reveal.addEventListener/Reveal.removeEventListener api methods
This commit is contained in:
parent
ebb834f4b0
commit
19b67aab13
18
README.md
18
README.md
|
@ -68,16 +68,27 @@ The Reveal class provides a minimal JavaScript API for controlling its navigatio
|
||||||
|
|
||||||
### States
|
### States
|
||||||
|
|
||||||
If you set ``data-state="someState"`` on a slide ``<section>``, "someState" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide.
|
If you set ``data-state="somestate"`` on a slide ``<section>``, "somestate" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide.
|
||||||
|
|
||||||
Furthermore you can also listen to these changes in state via JavaScript:
|
Furthermore you can also listen to these changes in state via JavaScript:
|
||||||
|
|
||||||
```
|
```
|
||||||
document.addEventListener( 'someState', function() {
|
Reveal.addEventListener( 'somestate', function() {
|
||||||
// TODO: Sprinkle magic
|
// TODO: Sprinkle magic
|
||||||
}, false );
|
}, false );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Slide change event
|
||||||
|
|
||||||
|
An 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index of the current slide.
|
||||||
|
|
||||||
|
```
|
||||||
|
Reveal.addEventListener( 'slidechanged', function( event ) {
|
||||||
|
// event.indexh & event.indexv
|
||||||
|
} );
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
* http://lab.hakim.se/reveal-js/ (original)
|
* http://lab.hakim.se/reveal-js/ (original)
|
||||||
|
@ -104,6 +115,9 @@ document.addEventListener( 'someState', function() {
|
||||||
#### 1.3 (master)
|
#### 1.3 (master)
|
||||||
- Revised keyboard shortcuts, including ESC for overview, N for next, P for previous. Thanks [mahemoff](https://github.com/mahemoff)
|
- Revised keyboard shortcuts, including ESC for overview, N for next, P for previous. Thanks [mahemoff](https://github.com/mahemoff)
|
||||||
- Added support for looped presentations via config
|
- Added support for looped presentations via config
|
||||||
|
- Fixed IE9 fallback
|
||||||
|
- Added event binding methods (Reveal.addEventListener, Reveal.removeEventListener)
|
||||||
|
- Added 'slidechanged' event
|
||||||
|
|
||||||
#### 1.2
|
#### 1.2
|
||||||
|
|
||||||
|
|
10
index.html
10
index.html
|
@ -148,7 +148,7 @@
|
||||||
<p>
|
<p>
|
||||||
Additionally custom events can be triggered on a per slide basis by binding to the <code>data-state</code> name.
|
Additionally custom events can be triggered on a per slide basis by binding to the <code>data-state</code> name.
|
||||||
</p>
|
</p>
|
||||||
<pre><code contenteditable style="font-size: 18px; margin-top: 20px;">document.addEventListener( 'customevent', function() {
|
<pre><code contenteditable style="font-size: 18px; margin-top: 20px;">Reveal.addEventListener( 'customevent', function() {
|
||||||
alert( '"customevent" has fired' );
|
alert( '"customevent" has fired' );
|
||||||
} );
|
} );
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
@ -261,10 +261,16 @@ linkify( 'a' );
|
||||||
query[ a.split( '=' ).shift() ] = a.split( '=' ).pop();
|
query[ a.split( '=' ).shift() ] = a.split( '=' ).pop();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
document.addEventListener( 'customevent', function() {
|
// Fires when a slide with data-state=customevent is activated
|
||||||
|
Reveal.addEventListener( 'customevent', function() {
|
||||||
alert( '"customevent" has fired' );
|
alert( '"customevent" has fired' );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
// Fires each time a new slide is activated
|
||||||
|
Reveal.addEventListener( 'slidechanged', function( event ) {
|
||||||
|
// event.indexh & event.indexv
|
||||||
|
} );
|
||||||
|
|
||||||
Reveal.initialize({
|
Reveal.initialize({
|
||||||
// Display controls in the bottom right corner
|
// Display controls in the bottom right corner
|
||||||
controls: true,
|
controls: true,
|
||||||
|
|
47
js/reveal.js
47
js/reveal.js
|
@ -78,13 +78,13 @@ var Reveal = (function(){
|
||||||
dom.controlsDown = document.querySelector( '#reveal .controls .down' );
|
dom.controlsDown = document.querySelector( '#reveal .controls .down' );
|
||||||
|
|
||||||
// Bind all view events
|
// Bind all view events
|
||||||
document.addEventListener('keydown', onDocumentKeyDown, false);
|
document.addEventListener( 'keydown', onDocumentKeyDown, false );
|
||||||
document.addEventListener('touchstart', onDocumentTouchStart, false);
|
document.addEventListener( 'touchstart', onDocumentTouchStart, false );
|
||||||
window.addEventListener('hashchange', onWindowHashChange, false);
|
window.addEventListener( 'hashchange', onWindowHashChange, false );
|
||||||
dom.controlsLeft.addEventListener('click', preventAndForward( navigateLeft ), false);
|
dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
|
||||||
dom.controlsRight.addEventListener('click', preventAndForward( navigateRight ), false);
|
dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
|
||||||
dom.controlsUp.addEventListener('click', preventAndForward( navigateUp ), false);
|
dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
|
||||||
dom.controlsDown.addEventListener('click', preventAndForward( navigateDown ), false);
|
dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );
|
||||||
|
|
||||||
// Copy options over to our config object
|
// Copy options over to our config object
|
||||||
extend( config, options );
|
extend( config, options );
|
||||||
|
@ -504,10 +504,8 @@ var Reveal = (function(){
|
||||||
|
|
||||||
document.documentElement.classList.add( state[i] );
|
document.documentElement.classList.add( state[i] );
|
||||||
|
|
||||||
// Dispatch custom event
|
// Dispatch custom event matching the state's name
|
||||||
var event = document.createEvent( "HTMLEvents" );
|
dispatchEvent( state[i] );
|
||||||
event.initEvent( state[i], true, true );
|
|
||||||
document.dispatchEvent( event );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up the remaints of the previous state
|
// Clean up the remaints of the previous state
|
||||||
|
@ -529,6 +527,12 @@ var Reveal = (function(){
|
||||||
|
|
||||||
clearTimeout( writeURLTimeout );
|
clearTimeout( writeURLTimeout );
|
||||||
writeURLTimeout = setTimeout( writeURL, 1500 );
|
writeURLTimeout = setTimeout( writeURL, 1500 );
|
||||||
|
|
||||||
|
// Dispatch an event notifying observers of the change in slide
|
||||||
|
dispatchEvent( 'slidechanged', {
|
||||||
|
'indexh': indexh,
|
||||||
|
'indexv': indexv
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -596,6 +600,17 @@ var Reveal = (function(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dispatches an event of the specified type from the
|
||||||
|
* #reveal DOM element.
|
||||||
|
*/
|
||||||
|
function dispatchEvent( type, properties ) {
|
||||||
|
var event = document.createEvent( "HTMLEvents", 1, 2 );
|
||||||
|
event.initEvent( type, true, true );
|
||||||
|
extend( event, properties );
|
||||||
|
dom.wrapper.dispatchEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigate to the next slide fragment.
|
* Navigate to the next slide fragment.
|
||||||
*
|
*
|
||||||
|
@ -736,7 +751,15 @@ var Reveal = (function(){
|
||||||
navigateLeft: navigateLeft,
|
navigateLeft: navigateLeft,
|
||||||
navigateRight: navigateRight,
|
navigateRight: navigateRight,
|
||||||
navigateUp: navigateUp,
|
navigateUp: navigateUp,
|
||||||
navigateDown: navigateDown
|
navigateDown: navigateDown,
|
||||||
|
|
||||||
|
// Forward event binding to the reveal DOM element
|
||||||
|
addEventListener: function( type, listener, useCapture ) {
|
||||||
|
( dom.wrapper || document.querySelector( '#reveal' ) ).addEventListener( type, listener, useCapture );
|
||||||
|
},
|
||||||
|
removeEventListener: function( type, listener, useCapture ) {
|
||||||
|
( dom.wrapper || document.querySelector( '#reveal' ) ).removeEventListener( type, listener, useCapture );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
80
js/reveal.min.js
vendored
80
js/reveal.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user