Focus body when page visibility changes to ensure keyboard shortcuts are usable
This commit is contained in:
parent
059311923b
commit
6043756b2e
36
js/reveal.js
36
js/reveal.js
@ -80,6 +80,9 @@ var Reveal = (function(){
|
|||||||
// Opens links in an iframe preview overlay
|
// Opens links in an iframe preview overlay
|
||||||
previewLinks: false,
|
previewLinks: false,
|
||||||
|
|
||||||
|
// Focuses body when page changes visiblity to ensure keyboard shortcuts work
|
||||||
|
focusBodyOnPageVisiblityChange: true,
|
||||||
|
|
||||||
// Theme (see /css/theme)
|
// Theme (see /css/theme)
|
||||||
theme: null,
|
theme: null,
|
||||||
|
|
||||||
@ -606,10 +609,23 @@ var Reveal = (function(){
|
|||||||
document.addEventListener( 'keydown', onDocumentKeyDown, false );
|
document.addEventListener( 'keydown', onDocumentKeyDown, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( config.progress && dom.progress ) {
|
if( config.progress && dom.progress ) {
|
||||||
dom.progress.addEventListener( 'click', onProgressClicked, false );
|
dom.progress.addEventListener( 'click', onProgressClicked, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( config.focusBodyOnPageVisiblityChange ) {
|
||||||
|
var visibilityChange;
|
||||||
|
if ('hidden' in document) {
|
||||||
|
visibilityChange = 'visibilitychange';
|
||||||
|
} else if ('msHidden' in document) {
|
||||||
|
visibilityChange = 'msvisibilitychange';
|
||||||
|
} else if ('webkitHidden' in document) {
|
||||||
|
visibilityChange = 'webkitvisibilitychange';
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener(visibilityChange, onPageVisibilityChange, false);
|
||||||
|
}
|
||||||
|
|
||||||
[ 'touchstart', 'click' ].forEach( function( eventName ) {
|
[ 'touchstart', 'click' ].forEach( function( eventName ) {
|
||||||
dom.controlsLeft.forEach( function( el ) { el.addEventListener( eventName, onNavigateLeftClicked, false ); } );
|
dom.controlsLeft.forEach( function( el ) { el.addEventListener( eventName, onNavigateLeftClicked, false ); } );
|
||||||
dom.controlsRight.forEach( function( el ) { el.addEventListener( eventName, onNavigateRightClicked, false ); } );
|
dom.controlsRight.forEach( function( el ) { el.addEventListener( eventName, onNavigateRightClicked, false ); } );
|
||||||
@ -2655,6 +2671,24 @@ var Reveal = (function(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle for the window level 'visibilitychange' event.
|
||||||
|
*/
|
||||||
|
function onPageVisibilityChange( event ) {
|
||||||
|
|
||||||
|
var isHidden = document.webkitHidden ||
|
||||||
|
document.msHidden ||
|
||||||
|
document.hidden;
|
||||||
|
|
||||||
|
// If, after clicking a link or similar and we're coming back,
|
||||||
|
// focus the document.body to ensure we can use keyboard shortcuts
|
||||||
|
if( isHidden === false && document.activeElement !== document.body ) {
|
||||||
|
document.activeElement.blur();
|
||||||
|
document.body.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoked when a slide is and we're in the overview.
|
* Invoked when a slide is and we're in the overview.
|
||||||
*/
|
*/
|
||||||
|
4
js/reveal.min.js
vendored
4
js/reveal.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user