首页 > 其他分享 >Parallax.js:实现自适应智能设备方向的视差效果

Parallax.js:实现自适应智能设备方向的视差效果

时间:2023-12-19 21:24:57浏览次数:24  
标签:scene js 实例 parallax 使用 视差 Parallax

哈喽!大家好!我是程序视点的小二哥。

今天给大家分享一款功能非常强大的javascript视觉差特效引擎插件:Parallax.js

Parallax.js简介

Parallax.js是一个简单的,轻量级的视差引擎。你可以将它作为作为jQueryZepto插件来使用,也可以以纯JS的方式来使用。

最-最-最厉害的是它可以对智能设备的方向作出反应,即使在没有陀螺仪或运动检测硬件可用的时候,也可使用光标的位置来代替。

我要开始啦

准备工作

首先肯定是先引入JS库。有三种方法:

1)使用CDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/parallax/3.1.0/parallax.min.js"></script>

2)在GitHub上下载Parallax.js,如下图所示。

下载最新版本的ZIP包,解压获得parallax.jsparallax.min.js。用其中一个就好。

3)npm依赖安装

npm i -s parallax-js
  • 源码路径:node_modules/parallax-js/src/parallax.js
  • 产品版路径:node_modules/parallax-js/dist/parallax.min.js

再根据你喜欢的工作流程要求导入库

import Parallax from 'parallax-js' or
const Parallax = require('parallax-js')

使用方法

每个Parallax.js实例都需要一个Dom元素,我们称为场景。让我们任意定义一个。

<div id="scene">
</div>

场景中的每个子元素都可以成为移动目标。我们先来最简单的。

<div id="scene">
  <div>My first Layer!</div>
  <div>My second Layer!</div>
</div>

在视差场景中移动的每个项目的类别layerdata-depth指定其在场景中的深度的属性。

深度0,将导致层保持静止。

深度1,将使层通过所计算出的运动的总效果移动。

0和1之间的值将导致图层相对于提供的比例移动一个量。

<style>
  #scene {
      width: 800px;
      height: 600px;
      margin: 200px auto;
  }
</style>
<div id="scene">
  <div class="layer" data-depth="0.2">My first Layer!</div>
  <div class="layer" data-depth="0.6">My second Layer!</div>
</div>

一旦DOM元素加载好,就可以创建出Parallax.js实例啦。

var scene = document.getElementById('scene');
var parallaxInstance = new Parallax(scene);

好了,你已经学会Parallax.js的入门操作了。看下效果!

就这么简单、粗暴!

进阶使用

Parallax.js如果仅仅是这样,且不弱爆啦?
在学习Parallax.js定义的多种配置和方法前,让我们来看看"目标"是怎么移动的?

层运动的计算规则

"目标",其实就是我们场景中的子元素,需要用class="layer"来指明,又称为""。每一个层的运动量依赖于3个因素:

  • scalarXscalarY的值
  • 父DOM元素的尺寸大小
  • 一个parallax场景中层的depth值

计算的公式如下:

/**
  * xMotion: x方向的总运动量
  * yMotion: y方向的总运动量
  * parentElement.width: 父容器的宽度
  * parentElement.height: 父容器的高度
  * scalarX:默认值10.
  * scalarY: 默认值10.
  * layerDepth: data-depth属性值
  * /
xMotion = parentElement.width  * (scalarX / 100) * layerDepth
yMotion = parentElement.height * (scalarY / 100) * layerDepth  

这就是画面中层级移动的原因。

行为属性配置参数

你可以为任何给定的Parallax实例设置如下这些行为的配置参数。可以在HTML标签中使用data属性来指定,也可以通过构造函数和API在JavaScript中指定

其他API方法

上面说过,一些属性参数配置项可以通过方法来指定,如scalar-xscalar-y,就可以通过scalar(x, y)来调用。
除此之外,Parallax.js还有如下常用方法:

parallax.enable(); //让禁止运行的实例恢复运行
parallax.disable(); //禁止实例运行
parallax.destroy(); //销毁实例

作为jQuery插件使用

如果你将Parallax.js作为jQueryZepto插件来使用,可以如下方式使用:

$('#scene').parallax();   

//或带参数的用法:
$('#scene').parallax({
  calibrateX: false,
  calibrateY: true,
  invertX: false,
  invertY: true,
  limitX: false,
  limitY: 10,
  scalarX: 2,
  scalarY: 8,
  frictionX: 0.2,
  frictionY: 0.8,
  originX: 0.0,
  originY: 1.0
}); 

注意:使用jQueryZepto前,要引入相应的库。

还没使用过Parallax.js的小伙伴们,赶紧秀起来吧!

程序视点还有更多好玩实用的项目知识,欢迎小伙伴们参与讨论哦~

标签:scene,js,实例,parallax,使用,视差,Parallax
From: https://www.cnblogs.com/tanggoahead/p/17914762.html

相关文章

  • 前端json转excel 到zip下载
    问题描述:后端返回数据原先返回是多个json文件的压缩包二进制文件流,前端直接下载二进制文件流。但是客户要求下载excel类型文件。解决方案:前端拿到表格的json数据转换成对应table的html字符串,使用插件js-xlsx。给个链接,import*asXLSXfrom'xlsx'//JSONData为导出的json数......
  • json模块
    json模块(一)序列化和反序列化(1)什么是序列化将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。(2)为什么要序列化给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里然后另一个python程序再从文件里读出来。但是我们都知道对于文件......
  • leaflet在vue2中标点 加载geoJSON
    lealfet版本1.9.4vue版本2.6引入:importLfrom'leaflet'  import'leaflet/dist/leaflet.css'  //记得引入样式不然加载瓦片图后地图会错乱1.初始化this.map=L.map(this.mapId,mapInitOptionNew)//this.mapId是容器的idletcenter=[32.666,129.547]const......
  • 全国省市json文件
    [{"label":"北京市","value":"北京市","children":[{"label":"东城区","code":"110101","value":"东城区"......
  • three.js3D地图省市下钻加上钻踩坑记录(未完待续)
     1,three安装失败首先脚手架种安装three,我不知道是网络问题还是什么,three我总是安装不上,于是我就下载了网上别的博主得成品代码,把里面de包拿出来放在我自己项目中安装包链接在此,如有需要自取,https://files.cnblogs.com/files/jickma/three.rar?t=1702967875&download=true......
  • js slice截取数组 + splice删除/添加数组数据
    varheroes=["李白",'蔡文姬','韩信','赵云','甄姬','阿珂','貂蝉','妲己'];//slice截取不改变原数组返回新的数组/*slice(开始索引,结束索引)从0开始左开右闭*/console.log(heroes.slice(1,4))//['蔡文姬',......
  • Java http请求json数据
    publicstaticStringsendJson(Stringurl,Stringjson){StringreturnValue="调用接口失败";CloseableHttpClienthttpClient=HttpClients.createDefault();ResponseHandler<String>responseHandler=newBasicResponseHandler();try{......
  • layui 时间控件 动态js渲染添加
    <tableclass="layui-table"id="myTable"><thead><tr><th>日期</th><th>操作</th></tr></thead><tbody><tr><td>......
  • js中?.、??、??=的用法及使用场景
    js中?.、??、??=的用法及使用场景小熊爱敲代码征途慢慢,唯有奋斗​关注她 你经常看TA的内容  上面这个错误,相信前端开发工程师应该经常遇到吧,要么是自己考虑不全造成的,要么是后端开发人员丢失数据或者传输错误数据类型造成的。因此对数据访问......
  • 可视化大屏:autofit.js 一行搞定自适应
    可视化大屏:autofit.js一行搞定自适应king ​关注她 12人赞同了该文章可视化大屏适配/自适应现状可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件、工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无......