1
0
mirror of https://github.com/hakimel/reveal.js.git synced 2025-08-13 01:54:21 +02:00

add support for responsively activating reader mode via

This commit is contained in:
Hakim El Hattab
2023-10-06 09:14:23 +02:00
parent 899a45dff6
commit ab52d334df
8 changed files with 146 additions and 6 deletions

View File

@@ -276,6 +276,10 @@ export default {
// Only applies to presentations in reader mode.
readerScrollSnap: 'proximity',
// Responsively activate the reader mode when we reach the specified
// width (in pixels)
readerActivationWidth: null,
// The maximum number of pages a single slide can expand onto when printing
// to PDF, unlimited by default
pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY,

View File

@@ -14,6 +14,8 @@ export default class Reader {
this.active = false;
this.activatedCallbacks = [];
this.onScroll = this.onScroll.bind( this );
}
/**
@@ -32,7 +34,7 @@ export default class Reader {
const slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR );
viewportElement.classList.add( 'loading-scroll-mode', 'reveal-reader' );
viewportElement.addEventListener( 'scroll', this.onScroll.bind( this ) );
viewportElement.addEventListener( 'scroll', this.onScroll );
let presentationBackground;
if( viewportElement ) {
@@ -113,7 +115,11 @@ export default class Reader {
this.active = false;
this.Reveal.getViewportElement().classList.remove( 'reveal-reader' );
const viewportElement = this.Reveal.getViewportElement();
viewportElement.removeEventListener( 'scroll', this.onScroll );
viewportElement.classList.remove( 'reveal-reader' );
this.Reveal.getSlidesElement().innerHTML = this.slideHTMLBeforeActivation;
this.Reveal.sync();

View File

@@ -999,6 +999,18 @@ export default function( revealElement, options ) {
}
});
}
// Responsively turn on the reader mode if there is an activation
// width configured. Ignore if we're configured to always be in
// reader mode.
if( typeof config.readerActivationWidth === 'number' && config.view !== 'reader' ) {
if( size.presentationWidth < config.readerActivationWidth ) {
if( !reader.isActive() ) reader.activate();
}
else {
if( reader.isActive() ) reader.deactivate();
}
}
}
dom.viewport.style.setProperty( '--slide-scale', scale );