create background element from bg controller
This commit is contained in:
parent
97ee72549b
commit
2a06e0d1e5
@ -421,6 +421,11 @@ Reveal.addEventListener( 'customevent', function() {
|
|||||||
center: true,
|
center: true,
|
||||||
hash: true,
|
hash: true,
|
||||||
|
|
||||||
|
// parallaxBackgroundImage: "https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg",
|
||||||
|
|
||||||
|
// Parallax background size
|
||||||
|
// parallaxBackgroundSize: "2100px 900px",
|
||||||
|
|
||||||
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
||||||
|
|
||||||
// More info https://github.com/hakimel/reveal.js#dependencies
|
// More info https://github.com/hakimel/reveal.js#dependencies
|
||||||
|
@ -12,6 +12,14 @@ export default class Backgrounds {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
|
||||||
|
this.element = document.createElement( 'div' );
|
||||||
|
this.element.className = 'backgrounds';
|
||||||
|
this.Reveal.getRevealElement().appendChild( this.element );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the slide background elements and appends them
|
* Creates the slide background elements and appends them
|
||||||
* to the background container. One element is created per
|
* to the background container. One element is created per
|
||||||
@ -20,16 +28,15 @@ export default class Backgrounds {
|
|||||||
create() {
|
create() {
|
||||||
|
|
||||||
let printMode = this.Reveal.isPrintingPDF();
|
let printMode = this.Reveal.isPrintingPDF();
|
||||||
let backgroundElement = this.Reveal.getBackgroundsElement();
|
|
||||||
|
|
||||||
// Clear prior backgrounds
|
// Clear prior backgrounds
|
||||||
backgroundElement.innerHTML = '';
|
this.element.innerHTML = '';
|
||||||
backgroundElement.classList.add( 'no-transition' );
|
this.element.classList.add( 'no-transition' );
|
||||||
|
|
||||||
// Iterate over all horizontal slides
|
// Iterate over all horizontal slides
|
||||||
this.Reveal.getHorizontalSlides().forEach( slideh => {
|
this.Reveal.getHorizontalSlides().forEach( slideh => {
|
||||||
|
|
||||||
let backgroundStack = this.createBackground( slideh, backgroundElement );
|
let backgroundStack = this.createBackground( slideh, this.element );
|
||||||
|
|
||||||
// Iterate over all vertical slides
|
// Iterate over all vertical slides
|
||||||
toArray( slideh.querySelectorAll( 'section' ) ).forEach( slidev => {
|
toArray( slideh.querySelectorAll( 'section' ) ).forEach( slidev => {
|
||||||
@ -45,10 +52,10 @@ export default class Backgrounds {
|
|||||||
// Add parallax background if specified
|
// Add parallax background if specified
|
||||||
if( this.Reveal.getConfig().parallaxBackgroundImage ) {
|
if( this.Reveal.getConfig().parallaxBackgroundImage ) {
|
||||||
|
|
||||||
backgroundElement.style.backgroundImage = 'url("' + this.Reveal.getConfig().parallaxBackgroundImage + '")';
|
this.element.style.backgroundImage = 'url("' + this.Reveal.getConfig().parallaxBackgroundImage + '")';
|
||||||
backgroundElement.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;
|
this.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;
|
||||||
backgroundElement.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;
|
this.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;
|
||||||
backgroundElement.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;
|
this.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;
|
||||||
|
|
||||||
// Make sure the below properties are set on the element - these properties are
|
// Make sure the below properties are set on the element - these properties are
|
||||||
// needed for proper transitions to be set on the element via CSS. To remove
|
// needed for proper transitions to be set on the element via CSS. To remove
|
||||||
@ -61,7 +68,7 @@ export default class Backgrounds {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
backgroundElement.style.backgroundImage = '';
|
this.element.style.backgroundImage = '';
|
||||||
this.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );
|
this.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -221,7 +228,6 @@ export default class Backgrounds {
|
|||||||
update( includeAll = false ) {
|
update( includeAll = false ) {
|
||||||
|
|
||||||
let currentSlide = this.Reveal.getCurrentSlide();
|
let currentSlide = this.Reveal.getCurrentSlide();
|
||||||
let backgroundElement = this.Reveal.getBackgroundsElement();
|
|
||||||
let indices = this.Reveal.getIndices();
|
let indices = this.Reveal.getIndices();
|
||||||
|
|
||||||
let currentBackground = null;
|
let currentBackground = null;
|
||||||
@ -232,7 +238,7 @@ export default class Backgrounds {
|
|||||||
|
|
||||||
// Update the classes of all backgrounds to match the
|
// Update the classes of all backgrounds to match the
|
||||||
// states of their slides (past/present/future)
|
// states of their slides (past/present/future)
|
||||||
toArray( backgroundElement.childNodes ).forEach( ( backgroundh, h ) => {
|
toArray( this.element.childNodes ).forEach( ( backgroundh, h ) => {
|
||||||
|
|
||||||
backgroundh.classList.remove( 'past', 'present', 'future' );
|
backgroundh.classList.remove( 'past', 'present', 'future' );
|
||||||
|
|
||||||
@ -303,7 +309,7 @@ export default class Backgrounds {
|
|||||||
let previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;
|
let previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;
|
||||||
let currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );
|
let currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );
|
||||||
if( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {
|
if( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {
|
||||||
backgroundElement.classList.add( 'no-transition' );
|
this.element.classList.add( 'no-transition' );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.previousBackground = currentBackground;
|
this.previousBackground = currentBackground;
|
||||||
@ -325,7 +331,7 @@ export default class Backgrounds {
|
|||||||
|
|
||||||
// Allow the first background to apply without transition
|
// Allow the first background to apply without transition
|
||||||
setTimeout( () => {
|
setTimeout( () => {
|
||||||
backgroundElement.classList.remove( 'no-transition' );
|
this.element.classList.remove( 'no-transition' );
|
||||||
}, 1 );
|
}, 1 );
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -336,7 +342,6 @@ export default class Backgrounds {
|
|||||||
*/
|
*/
|
||||||
updateParallax() {
|
updateParallax() {
|
||||||
|
|
||||||
let backgroundElement = this.Reveal.getBackgroundsElement();
|
|
||||||
let indices = this.Reveal.getIndices();
|
let indices = this.Reveal.getIndices();
|
||||||
|
|
||||||
if( this.Reveal.getConfig().parallaxBackgroundImage ) {
|
if( this.Reveal.getConfig().parallaxBackgroundImage ) {
|
||||||
@ -344,7 +349,7 @@ export default class Backgrounds {
|
|||||||
let horizontalSlides = this.Reveal.getHorizontalSlides(),
|
let horizontalSlides = this.Reveal.getHorizontalSlides(),
|
||||||
verticalSlides = this.Reveal.getVerticalSlides();
|
verticalSlides = this.Reveal.getVerticalSlides();
|
||||||
|
|
||||||
let backgroundSize = backgroundElement.style.backgroundSize.split( ' ' ),
|
let backgroundSize = this.element.style.backgroundSize.split( ' ' ),
|
||||||
backgroundWidth, backgroundHeight;
|
backgroundWidth, backgroundHeight;
|
||||||
|
|
||||||
if( backgroundSize.length === 1 ) {
|
if( backgroundSize.length === 1 ) {
|
||||||
@ -355,7 +360,7 @@ export default class Backgrounds {
|
|||||||
backgroundHeight = parseInt( backgroundSize[1], 10 );
|
backgroundHeight = parseInt( backgroundSize[1], 10 );
|
||||||
}
|
}
|
||||||
|
|
||||||
let slideWidth = backgroundElement.offsetWidth,
|
let slideWidth = this.element.offsetWidth,
|
||||||
horizontalSlideCount = horizontalSlides.length,
|
horizontalSlideCount = horizontalSlides.length,
|
||||||
horizontalOffsetMultiplier,
|
horizontalOffsetMultiplier,
|
||||||
horizontalOffset;
|
horizontalOffset;
|
||||||
@ -369,7 +374,7 @@ export default class Backgrounds {
|
|||||||
|
|
||||||
horizontalOffset = horizontalOffsetMultiplier * indices.h * -1;
|
horizontalOffset = horizontalOffsetMultiplier * indices.h * -1;
|
||||||
|
|
||||||
let slideHeight = backgroundElement.offsetHeight,
|
let slideHeight = this.element.offsetHeight,
|
||||||
verticalSlideCount = verticalSlides.length,
|
verticalSlideCount = verticalSlides.length,
|
||||||
verticalOffsetMultiplier,
|
verticalOffsetMultiplier,
|
||||||
verticalOffset;
|
verticalOffset;
|
||||||
@ -383,7 +388,7 @@ export default class Backgrounds {
|
|||||||
|
|
||||||
verticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;
|
verticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;
|
||||||
|
|
||||||
backgroundElement.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';
|
this.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,8 +223,8 @@ export default function( revealElement, options ) {
|
|||||||
dom.wrapper.classList.remove( 'no-hover' );
|
dom.wrapper.classList.remove( 'no-hover' );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Background element
|
// Slide backgrounds
|
||||||
dom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null );
|
backgrounds.render();
|
||||||
|
|
||||||
// Progress bar
|
// Progress bar
|
||||||
dom.progress = createSingletonNode( dom.wrapper, 'div', 'progress', '<span></span>' );
|
dom.progress = createSingletonNode( dom.wrapper, 'div', 'progress', '<span></span>' );
|
||||||
@ -2787,7 +2787,6 @@ export default function( revealElement, options ) {
|
|||||||
// Returns reveal.js DOM elements
|
// Returns reveal.js DOM elements
|
||||||
getRevealElement: () => dom.wrapper || document.querySelector( '.reveal' ),
|
getRevealElement: () => dom.wrapper || document.querySelector( '.reveal' ),
|
||||||
getSlidesElement: () => dom.slides,
|
getSlidesElement: () => dom.slides,
|
||||||
getBackgroundsElement: () => dom.background,
|
|
||||||
|
|
||||||
// Checks if reveal.js has been loaded and is ready for use
|
// Checks if reveal.js has been loaded and is ready for use
|
||||||
isReady: () => ready,
|
isReady: () => ready,
|
||||||
|
Loading…
Reference in New Issue
Block a user