Multiverse Parallax

A jQuery plugin for parallax sites.

http://pixabay.com/en/living-room-home-house-architecture-162674/

Introduction

There are situations where one has to make a one pager using parallaxes. In those cases it would simply help if there was something that could be easily injected, with minimal use of actual scripting.

I myself worked with another parallax script until I found out I had to make too many modifications, so I decided to create my own from scratch.

G.A.M. Kertopermono

Instructions

First make sure you have jQuery loaded up in your page first, then load multiverseParallax.js into your page. Now all you have to do is apply the proper jQuery functions on the elements of your choosing, and you're done.

For example, if you want to apply the parallax on all elements with class parallax, you can use the following code:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="multiverseParallax.js"></script>

<script>
  $('.parallax').multiverseParallax();
</script>
http://pixabay.com/en/blogger-cellphone-office-business-336371/

Global settings

Multiverse Parallax allows you to preset values for all your parallax elements and other related things. You can either do that by directly changing settings, or by creating an element with the data contained in it. Said element will be removed once the data has been loaded.

In the first case, you need to define your settings in an object. The key names are different from the names used when using an element to load your data.

var options = { paddingTop: '20px', navScrollOffset: 10 };

$.multiverseParallaxSettings( options );

De instellingen in de tabel hieronder kunnen worden gebruikt door data- toe te voegen, of door een <var> element aan te maken binnen deze sectie met de naam in de name-attribuut:

Name Key Description Valid values Default
default-padding-top paddingTop The default top padding. string(numeral | px | vh | bh | ch | target) undefined
default-margin-bottom marginBottom The default bottom margin. string(numeral | px | vh | bh | ch | target) "0"
default-parallax-stretch stretch Whether the parallax element adjusts itself to its content when the content is larger than the element itself. boolean false
default-parallax-image-location imageLocation The base location for the images. string ""
default-parallax-container container The container element from which the parallax operates. string(target) | window window
default-parallax-attachment attachment The background attachment. "scroll" | "fixed" "fixed"
default-parallax-offscreen-calculation offscreenCalculation Whether the section should calculate its positions even when off screen. Boolean false
default-navigation-scroll-offset navigationScrollOffset The offset of the navigation point string(numeral | px | vh | bh | ch | target) '0'
default-navigation-scroll-speed navigationScrollSpeed The scrolling speed of the navigation. Integer 1000
default-navigation-scroll-interrupt navigationScrollInterrupt Whether the current navigation should be interrupted when a new navigation request is made. Boolean true
http://pixabay.com/en/drill-milling-milling-machine-444493/

Parameters

Hier is een volledige lijst van parameters, welke kunnen worden gebruikt door data- toe te voegen:

Naam Beschrijving Mogelijke waarden Standaard
background-speed-y De snelheid van de verticale scroll. 1 betekent meescrollen met de pagina, 0 betekent stilstaan relatief aan het scherm. Numerieke waarde 1
background-speed-x De snelheid van de horizontale scroll. 0 betekent geen beweging, negatieve waarden beweegt naar rechts, positieve waarden naar links. Numerieke waarde 0
parallax-align De verticale uitlijning. "top" | "bottom" "top"
parallax-height De hoogte van de sectie. Numerieke waarden worden geïnterpreteerd als percentage van het scherm. Numerieke waarde | px | doelelement 100
parallax-stick-y Stopt de verticale beweging van de achtergrond wanneer deze zijn positie bereikt heeft. "before" | "after"  
parallax-stick-x Stopt de horizontale beweging van de achtergrond wanneer deze zijn positie bereikt heeft. "before" | "after"  
parallax-image De achtergrondafbeelding. tekst naar de locatie  
parallax-trigger-height De hoogte vanaf de top van de sectie van waar alles wordt berekend. Dit is de hoogte waar de achtergrond blijft plakken. Numerieke waarden worden geïnterpreteerd als percentage van het scherm. Numerieke waarde | px | doelelement 0
parallax-stretch Bepaalt of de sectie zich aanpast aan de hoogte van de inhoud zodra deze hoger is dan de sectie zelf. true | false Waarde van default-parallax-stretch
http://pixabay.com/en/cafe-gourmande-french-caf%C3%A9-bistro-258201/

Examples

This entire page was made using this script, which makes it a good showcase of what this script can do. Throughout the examples I'll be refering to each data variable by its name instead of its key, for example, padding-top refers to the top padding. This because I don't use the keys in these examples.

Now, before I begin, this page uses various global settings, listed below with explanation.

Data Value Reason
default-parallax-stretch true Most of these examples exceed the default height, so by making them all stretched by default I don't have to worry about fitting them.
default-padding-top "#main_navigation_header" This refers to the navigation bar. It's to ensure each section takes the height of said bar into account.
default-parallax-attachment "scroll" By setting this to scroll instead of fixed, I can ensure it will somewhat work on Android devices as well. The reason this isn't the default is because there might be a bit more lag using scroll.
http://pixabay.com/en/apple-computer-keyboard-equipment-423588/

Voorbeeld - Basis

Dit is een basis-opstelling voor een parallax-achtergrond. data-parallax-image is hier een niet-gedocumenteerde parameter dat kan worden gebruikt, en deze maakt het mogelijk om direct achtergronden toe te voegen. In de volgende voorbeelden wordt dit weggelaten tenzij het nodig is om deze te definiëren.

<section data-background-speed-y="0.3" data-parallax-image="readme-assets/live-concert.jpg" class="parallax">
</section>
http://pixabay.com/en/live-concert-concert-stage-people-455762/

Voorbeeld - Patroon

Dit patroon beweegt horizontaal, en heeft tevens een vaste grootte voor het achtergrondplaatje, welke kan worden bereikt door data-background-size in te stellen. Deze werkt het zelfde als de background-size stijlatribuut.

<section data-background-speed-y="0" data-background-speed-x="1" data-background-size="150px 150px" class="parallax">
</section>
http://pixabay.com/en/pattern-plaid-texture-backgrounds-479696/

Voorbeeld - Veranderend achtergrond bij plakken

Wanneer de achtergrond op een bepaalde positie komt, wanneer de achtergrond op een positie "plakt", verandert de achtergrond. Deze positie wordt bepaald door de data-parallax-stick-x of data-parallax-stick-y parameter. data-parallax-stick-image bepaalt de afbeelding die moet worden weergeven wanneer de achtergrond plakt.

<section data-background-speed-y="0.3" data-parallax-stick-y="before" data-parallax-stick-image="readme-assets/home-office-stick.jpg" data-parallax-image="readme-assets/home-office.jpg" class="parallax">
</section>
http://pixabay.com/en/home-office-workstation-office-336378/

Voorbeeld - Schuifdeuren

Dit maakt gebruik van meerdere secties, en gebruikt bootstrap om het goed te stylen. Er zijn hier een aantal nieuwe parameters. data-parallax-stretch zorgt ervoor dat de hoogte van de sectie ten minste net zo hoog is als de inhoud. Wanneer dit is ingesteld op true dan past deze zich aan aan de eerste child. Mocht er een andere element moeten dienen als referentiemateriaal, dan kan de parameter data-parallax-stretch-target worden gebruikt.

data-padding-top regelt de top padding. In dit geval is deze op nul gezet, omdat deze in de globale instellingen op 50 is ingesteld.

data-image-size definieert de oorspronkelijke grootte van de afbeelding. Deze kan precies de grootte zijn van de afbeelding, maar hoeft niet. De waarde is nodig voor secties die niet de volledige breedte gebruiken. In dit geval zijn de elementen half de breedte van het venster.

Om het geheel goed te laten werken moeten er twee extra klassen worden aangemaakt, één welke een relatieve positie heeft en één welke een absolute positie heeft. De relatieve positie zorgt ervoor dat het element geen statische element is, waardoor de element met een absolute positie dit als een beginpositie ziet in plaats van het document. Omdat hier alle parallax elementen een relatieve positie hebben hoeft er geen aparte class worden aangemaakt, echter, mocht dit niet het geval zijn, dan zou de class er zo uit kunnen zien:

.relative {
  position: relative;

De element met een absolute positie, een overlay, moet dezelfde grootte hebben als de element met een relatieve positie, waardoor de class er als volgt uit komt te zien.

.overlay {
  position: absolute;
  left: 0;
  top:0;
  width: 100%;
  height: 100%;
}

Het doel hiervan is om een tekst over de twee deur-secties te laten verschijnen, in plaats van er onder.

<section data-background-speed-y="0.3"
        data-parallax-image="readme-assets/people.jpg"
        data-parallax-stretch="true"
        data-parallax-stretch-target="#voorbeeld-schuifdeur-content"
        data-padding-top="0"
        data-parallax-stretch-margin-bottom="50"
        class="parallax clearfix relative">
    <section data-background-speed-y="0.3"
            data-background-speed-x="-1"
            data-parallax-stick-x="before"
            data-image-size="450x600"
            data-background-repeat="no-repeat"
            data-parallax-align-x="right"
            data-parallax-image="readme-assets/door-left.jpg"
            data-parallax-stretch="true"
            data-parallax-stretch-target="#voorbeeld-schuifdeur-content"
            class="parallax col-xs-6 relative">
    </section>
    <section data-background-speed-y="0.3"
            data-background-speed-x="1"
            data-parallax-stick-x="before"
            data-image-size="450x600"
            data-background-repeat="no-repeat"
            data-parallax-offset-x-percent="100"
            data-parallax-image="readme-assets/door-right.jpg"
            data-parallax-stretch="true"
            data-parallax-stretch-target="#voorbeeld-schuifdeur-content"
            class="parallax col-xs-6">
    </section>
    <section data-parallax-stretch="true" class="parallax overlay">
        <div id="voorbeeld-schuifdeur-content" class="container">
          ...
        </div>
    </section>
</section>
http://pixabay.com/en/people-action-adventure-american-219806/
http://pixabay.com/en/door-ye-xian-tower-chinese-style-526533/

Voorbeeld - Pijl

Soms is het nodig dat een stick event op een ander moment wordt getriggert. In dit geval kan worden gebruik gemaakt van data-parallax-trigger-height. Deze kan, net zoals de meeste soortgelijke data-attributen, drie verschillende soorten data aannemen. Wanneer het een numerieke waarde heeft zal het aannemen dat het een percentage moet zijn. In dit geval is het een percentage van de hoogte van het venster, niet van het blok zelf. Er kan ook worden gekozen voor een exacte waarde, welke wordt aangeduid door px achter de waarde te zetten. Wanneer het geen van de vorigen is wordt er aangenomen dat het de waarde moet nemen van een doel-element.

In dit voorbeeld wordt er gekozen voor een percentage, omdat de hoogte van de element 200% de hoogte van het venster is.

De afbeelding is hier tevens geschaald door middel van data-parallax-size-y. Een soortgelijke attribuut is data-parallax-size-x, welke voor de breedte van de huidige element werkt. Wanneer enkel een van beiden wordt ingesteld, past de grootte van het missende attribuut zich aan de ander aan, gelijkend aan wanneer er als grootte auto wordt gebruikt.

<section data-background-speed-y="1" data-parallax-stick-y="after" data-parallax-stick-force="true" data-parallax-size-y="5" data-background-repeat="no-repeat" data-image-size="136.301x133.554" data-parallax-offset-y-percent="45" data-parallax-align-x="center" data-parallax-height="200" data-parallax-trigger-height="100" class="parallax">
</section>
http://pixabay.com/en/arrow-down-green-button-pointing-24845/

Voorbeeld - Scheur

Mocht het nodig zijn dat er een animatie speelt bij het scrollen, dan kunnen er keyframes worden toegevoegd. Deze worden gedefinieerd in een element met class parallax-keyframes, welke weer elementen bevat met class parallax-keyframe.

<section data-background-speed-y="1" data-parallax-stick-force="true" data-parallax-size-y="100" data-background-repeat="no-repeat" data-image-size="15x58" data-parallax-align-x="center" data-parallax-trigger-height="-50" data-parallax-offset-y-percent="50" class="parallax">
  <object class="parallax-keyframes" data-type="main" data-parallax-animation-length="5">
    <param class="parallax-keyframe" data-frame="0" data-background-image="readme-assets/cracked-1.svg"></param>
    <param class="parallax-keyframe" data-frame="1" data-background-image="readme-assets/cracked-2.svg"></param>
    <param class="parallax-keyframe" data-frame="2" data-background-image="readme-assets/cracked-3.svg"></param>
    <param class="parallax-keyframe" data-frame="3" data-background-image="readme-assets/cracked-4.svg"></param>
  </object>
</section>
G.A.M. Kertopermono

About

Multiverse Parallax

By G.A.M. Kertopermono (@GaryCXJk)

Loosely based on fullscreen-parallax
By Topher Winward (@Winwardo), 2014
http://winwardo.co.uk

Special credits

Wesley Stam

G.A.M. Kertopermono