# parallax **Repository Path**: mirrors_svenanders/parallax ## Basic Information - **Project Name**: parallax - **Description**: Simple, lightweight parallax engine that reacts to the orientation of a smart device - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-18 - **Last Updated**: 2026-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Parallax.js Simple, lightweight **Parallax Engine** that reacts to the orientation of a smart device. Where no gyroscope or motion detection hardware is available, the position of the cursor is used instead. Check out this **[demo][demo]** to see it in action! ## Setup Simply create a list of elements giving each item that you want to move within your parallax scene a class of `layer` and a `data-depth` attribute specifying its depth within the scene. A depth of **0** will cause the layer to remain stationary, and a depth of **1** will cause the layer to move by the total effect of the calculated motion. Values inbetween **0** and **1** will cause the layer to move by an amount relative to the supplied ratio. ```html ``` To kickoff a **Parallax** scene, simply select your parent DOM Element and pass it to the **Parallax** constructor. ```javascript var scene = document.getElementById('scene'); var parallax = new Parallax(scene); ``` ## Behaviours There are a number of behaviours that you can setup for any given **Parallax** instance. These behaviours can either be specified in the markup via data attributes or in JavaScript via the constructor and API. | Behavior | Values | Description | | ------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------ | | `calibrate-x` | `true` or `false` | Specifies whether or not to cache & calculate the motion relative to the initial `x` axis value on initialisation. | | `calibrate-y` | `true` or `false` | Specifies whether or not to cache & calculate the motion relative to the initial `y` axis value on initialisation. | | `invert-x` | `true` or `false` | `true` moves layers in opposition to the device motion, `false` slides them away. | | `invert-y` | `true` or `false` | `true` moves layers in opposition to the device motion, `false` slides them away. | | `limit-x` | `number` or `false` | A numeric value limits the total range of motion in `x`, `false` allows layers to move with complete freedom. | | `limit-y` | `number` or `false` | A numeric value limits the total range of motion in `y`, `false` allows layers to move with complete freedom. | | `scalar-x` | `number` | Multiplies the input motion by this value, increasing or decreasing the sensitivity of the layer motion. | | `scalar-y` | `number` | Multiplies the input motion by this value, increasing or decreasing the sensitivity of the layer motion. | | `friction-x` | `number` `0 - 1` | The amount of friction the layers experience. This essentially adds some easing to the layer motion. | | `friction-y` | `number` `0 - 1` | The amount of friction the layers experience. This essentially adds some easing to the layer motion. | In addition to the behaviours described above, there are **two** methods `enable()` and `disable()` that *activate* and *deactivate* the **Parallax** instance respectively. ### Behaviors: Data Attributes Example ```html ``` ### Behaviors: Constructor Object Example ```javascript var scene = document.getElementById('scene'); var parallax = new Parallax(scene, { calibrateX: false, calibrateY: true, invertX: false, invertY: true, limitX: false, limitY: 10, scalarX: 2, scalarY: 8, frictionX: 0.2, frictionY: 0.8 }); ``` ### Behaviors: API Example ```javascript var scene = document.getElementById('scene'); var parallax = new Parallax(scene); parallax.enable(); parallax.disable(); parallax.calibrate(false, true); parallax.invert(false, true); parallax.limit(false, 10); parallax.scalar(2, 8); parallax.friction(0.2, 0.8); ``` ## jQuery If you're using **[jQuery][jquery]** or **[Zepto][zepto]** and would prefer to use **Parallax.js** as a plugin, you're in luck! ```javascript $('#scene').parallax(); ``` ### jQuery: Passing Options ```javascript $('#scene').parallax({ calibrateX: false, calibrateY: true, invertX: false, invertY: true, limitX: false, limitY: 10, scalarX: 2, scalarY: 8, frictionX: 0.2, frictionY: 0.8 }); ``` ### jQuery: API ```javascript var $scene = $('#scene').parallax(); $scene.parallax('enable'); $scene.parallax('disable'); $scene.parallax('calibrate', false, true); $scene.parallax('invert', false, true); $scene.parallax('limit', false, 10); $scene.parallax('scalar', 2, 8); $scene.parallax('friction', 0.2, 0.8); ``` ## iOS If you are writing a **native iOS application** and would like to use **parallax.js** within a `UIWebView`, you will need to do a little bit of work to get it running. `UIWebView` no longer automatically receives the `deviceorientation` event, so your native application must intercept the events from the gyroscope and reroute them to the `UIWebView`: 1. Include the **CoreMotion** framework `#import ` and create a reference to the **UIWebView** `@property(nonatomic, strong) IBOutlet UIWebView *parallaxWebView;` 2. Add a property to the app delegate (or controller that will own the **UIWebView**) `@property(nonatomic, strong) CMMotionManager *motionManager;` 3. Finally, make the following calls: ```Objective-C self.motionManager = [[CMMotionManager alloc] init]; if (self.motionManager.isGyroAvailable && !self.motionManager.isGyroActive) { [self.motionManager setGyroUpdateInterval:0.5f]; // Set the event update frequency (in seconds) [self.motionManager startGyroUpdatesToQueue:NSOperationQueue.mainQueue withHandler:^(CMGyroData *gyroData, NSError *error) { NSString *js = [NSString stringWithFormat:@"parallax.onDeviceOrientation({beta:%f, gamma:%f})", gyroData.rotationRate.x, gyroData.rotationRate.y]; [self.parallaxWebView stringByEvaluatingJavaScriptFromString:js]; }]; } ``` ## Build ``` cd build npm install node build.js ``` ## Author Matthew Wagerfield: [@mwagerfield][twitter] ## License Licensed under [MIT][mit]. Enjoy. [demo]: http://wagerfield.github.com/parallax/ [twitter]: http://twitter.com/mwagerfield [mit]: http://www.opensource.org/licenses/mit-license.php [jquery]: http://jquery.com/ [zepto]: http://zeptojs.com/