Parallax.js简介
Parallax.js是一款功能非常强大的javascript视觉差特效引擎插件。
在网页设计中,parallax 的主要原理就是让多层背景以不同的速度移动,形成立体的运动效果,从而带来出色的视觉体验。
- pc端的视差效果通常是 根据鼠标、键盘、滚动条的变化和操作 进行视觉上的差异化控制。鼠标可视为观察者的视角,元素位置、排列方式会随着视角的改变而改变。
- 移动端可能还会有 重力陀螺仪 之类的交互。
案例
根据鼠标的变化来控制(pc端)
案例:
经典案例:
gitHub (gitHub是一个在线软件源代码托管服务平台)报500时的页面
www.bilibili.com/video/BV1Lf…(视频)
使用方法
引入方式
1.CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/ parallax.min.js"></script>
2.安装并引入
npm i -s parallax-js
import Parallax from "parallax-js";
初始化插件
要初始化视觉差效果,可以选择指定的DOM元素之后,创建一个新的Parallax对象。
var scene = document.getElementById('scene');
var parallax = new Parallax(scene);
HTML结构
该视觉差特效的基本HTML结构使用的是一个无序列表,每一个列表项给它们一个class layer和一个data-depth属性来指定该层的深度。深度为0的层将是固定不动的,深度为1的层运动效果最激烈的层。0-1之间的层会根据值来相对移动。
<ul id="scene">
<li class="layer" data-depth="0.00"><img src="layer1.png"></li>
<li class="layer" data-depth="0.20"><img src="layer2.png"></li>
<li class="layer" data-depth="0.40"><img src="layer3.png"></li>
<li class="layer" data-depth="0.60"><img src="layer4.png"></li>
<li class="layer" data-depth="0.80"><img src="layer5.png"></li>
<li class="layer" data-depth="1.00"><img src="layer6.png"></li>
</ul>
层运动的计算规则
每一个层的运动量依赖于3个因素:
scalarX和scalarY的值- 父DOM元素的尺寸大小
- 一个parallax场景中层的
depth值
计算的公式如下:
xMotion = parentElement.width * (scalarX / 100) * layerDepth
yMotion = parentElement.height * (scalarY / 100) * layerDepth
所以在场景中一个data-depth为0.5的层,它的scalarX和scalarY值都为10(默认值),它的父容器的尺寸为1000px x 1000px,那么这个层在x和y方向的总运动量就为:
xMotion = 1000 * (10 / 100) * 0.5 = 50 # 50px of positive and negative motion in x
yMotion = 1000 * (10 / 100) * 0.5 = 50 # 50px of positive and negative motion in y
配置参数
下面是一些可用的配置参数,这些参数也可以在HTML标签中使用data属性来指定。
| 参数 | 值 | 描述 |
|---|---|---|
| relativeInput | true 或 false | Specifies whether or not to use the coordinate system of the element passed to the parallax constructor. Mouse input only |
| clipRelativeInput | true 或 false | Specifies whether or not to clip the mouse input to the bounds of the elementpassed to the parallax constructor. Mouse input only |
| calibrate-x | true 或 false | 指定是否根据初始时x轴的值来计算运动量 |
| calibrate-y | true 或 false | 指定是否根据初始时y轴的值来计算运动量 |
| invert-x | true 或 false | 设置为true则按反方向运动层 |
| invert-y | true 或 false | 设置为true则按反方向运动层 |
| limit-x | number或 false | x方向上总的运动量数值范围,设置为false则允许层自由运动 |
| limit-y | number或 false | y方向上总的运动量数值范围,设置为false则允许层自由运动 |
| scalar-x | number | 输入的运动量和这个值相乘,增加或减少层运动的灵敏度 |
| scalar-y | number | 输入的运动量和这个值相乘,增加或减少层运动的灵敏度 |
| friction-x | number 0-1 | 层运动的摩擦量,实际上是在层上添加一些easing效果 |
| friction-y | number 0-1 | 层运动的摩擦量,实际上是在层上添加一些easing效果 |
| origin-x | number | 鼠标输入的x原点,默认值是0.5。0会移动原点到页面的左边,1会移动原点到页面的右边。Mouse input only |
| origin-y | number | 鼠标输入的x原点,默认值是0.5。0会移动原点到页面的上边,1会移动原点到页面的下边。Mouse input only |
更多配置项和使用方式详见: www.htmleaf.com/jQuery/shij…
demo
1.引入
2.设置id为scene的div,为里面的图片设置data-depth,表示不同的层深,形成立体效果
3.获取到id为sence的dom,创建parallax对象
拓展
视差滚动(Parallax Scrolling)- 根据滚动条的变化来控制
传统的网页的文字、图片、背景都是一起按照相同方向相同速度滚动的,而视差滚动则是在滚动的时候,内容和多层次的背景实现或不同速度,或不同方向的运动。
案例:
经典案例:
QQ官网:im.qq.com/index
在滚动的时候后面的三张背景图和前面的内容再以不同的速度滚动。这就是最简单的视差滚动,比起背景纹丝不动来讲,这样会有点3D效果,相比起来也有更好的体验。
还有苹果之前的官网等等。