JS或JQ视差滚动怎样做?

JavaScript015

JS或JQ视差滚动怎样做?,第1张

jquery.parallax-scroll是一款效果超炫的平滑垂直滚动视觉差jQuery特效。该视觉差特效使用requestAnimationFrame和CSS3 3D transitions在页面垂直滚动时制作非常平滑的过渡动画效果。

或者

Jarallax.js是一款用于制作网页背景视觉差效果的jQuery插件。Jarallax.js视觉差插件可以控制不同的元素的动画速度,从而形成视觉差效果。并且该视觉差特效还带有动画进度条,效果非常酷。

两个都在这里了 自行选择

水平垂直的原理是一样的,它这个主要是增加了鼠标滚轮事件,其他的没啥特别。

<!doctype html>    

<html>    

<head>    

<meta charset="utf-8" />    

<title>视差滚动</title>    

<style>    

*{margin: 0padding: 0}    

body{  }    

#bg{width: 100%background-image: url(trim.jpg)background-size: coverheight: 768pxposition: fixed}    

#img1{position: fixedtop: 650pxborder: 1px solid #aaapadding: 4pxbackground-color: #fff}    

#img2{position: fixedtop: -500pxright: 0pxwidth: 600pxheight: 300pxborder: 1px solid #aaapadding: 4pxbackground-color: #fff}    

#txt1{top: 400px position: fixedfont-family: '黑体'font-size: 36pxcolor: #ffffont-weight: boldtext-shadow: 2px 2px 12px #fffleft: -400px}    

</style>    

<script src="jquery-1.11.1.min.js"></script>    

</head>    

<body>    

<div id="bg"></div>    

<img id="img1" src="thumb.jpg">    

<img id="img2" src="535032.jpg">    

<div id="txt1">纳米尖兵巴德尔</div>    

<div style="height:3000px"></div>    

    

<script>    

window.onscroll=function(){    

var ht=document.documentElement.scrollTop || document.body.scrollTop    

$("#bg").css({"background-position":'0px -'+ht/20+'px'})    

$("#img1").css({"top":650-ht/2+'px'})    

$("#img2").css({"top":-500+ht/2+'px'})    

$("#txt1").css({"left":-300+ht/2+'px','opacity':500/ht})    

}    

</script>    

</body>    

</html>

视差滚动(Parallax Scrolling)是指多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验。一般把网页解剖为:背景层、内容层和悬浮层(贴图层)。

当滚动鼠标滚轮的时候,各图层以不同速度移动,形成视差的效果。这就是时差滚动的大致原理。

原理是这样,但落实到技术细节上时,实现的方法却各种各样。

我个人大致归纳了一下:

1、以 “页面滚动条” 作为 “视差动画进度条” 的;

2、以 “滚轮刻度” 当作 “动画帧度” 去播放动画的(或者直接称为“隐藏进度条”);

3、鉴听mousewheel事件,事件被触发即播放动画,实现“翻页”效果;

下面的回答,均以上述1类的实现方式为基准。

为什么是1类呢?因为它很直观,和我们日常接触到的视频播放器是一样的:

下面,以Every Last Drop这个页面做为分析对象,去回答题主的问题。

做滚动网页的时候,是怎么实现页面的翻页?

首先,根据页面动画所需的分镜,去等比划分进度条。

例如:共有11个分镜,则分镜大致可以划分为:0%、10%、20%、30% .... 100%

但需要注意的是,整个滚动过程实际分为两个部分:分镜切换 和 分镜动画。

我们要预先划分好他们的比例,如:每一个分镜,2%的进度用于分镜切换,7%的进度用于分镜动画。

则进度大致可以划分为:

------------------------------------------

0%(初始,分镜1)

(消耗2%用于切换分镜)

2%(完全进入分镜2)

(消耗8%用于分镜动画的播放)

10%(分镜2动画播放完毕)

(消耗2%用于切换分镜)

12%(完全进入分镜3)

...(略)

------------------------------------------

按照上面的划分,当进度条滚动到10%的时候,就要开始进行分镜2到分镜3的切换,也就是所谓的翻页。当滚动到12%时,翻页结束。其他分镜如此类推。

(如果题主想问的是技术实现细节,估计要失望了!)

在做时间轴的时候,一般都要调用别人的js库。那么这个滚动页面,是不是也有一个js库?

随便在google搜一下,就搜到很多关于视差滚动插件的文章:10个优秀视差滚动插件

这里补充一点:做视差滚动页面绝对是体力活。

本着我为人人的分享精神,还是推荐一个我觉得好用凑合好用的时差滚动库:

Jarallax(Welcome to Jarallax.com)

设计思路清晰,API设计也很直观。依赖于jQuery1.7的版本,再高的版本就不支持了哦!

另外,作者貌似已经没有维护了...

滚动时每层不同滚动速率的实现原理是什么?

初中物理:单位时间相同,位移距离不同,速度也不同。

如何让滚动更加平滑?

这个问题就太大了,能重新开一个问题了。

这边我就简单回答一下吧(不细谈前端技术层面的优化,如:DOM数量、页面渲染优化这些)。

开头处,我提到的三种实现分类,实际上是这样一个情况:

1类是最自由的,用户甚至可以直接调整进度条,实现“快进”。

在这种设计下,用户鼠标滚轮的最小刻度,就是动画的一帧。因为不同浏览器之间,鼠标滚轮的最小刻度是不一样的。这就导致了,在不同浏览器之间,页面滚动过程中,动画播放的帧率是有差异的。如果遇到奇葩浏览器,鼠标滚动的最小刻度很大,动画甚至会出现“掉帧”的情况。

解决方法很简单,一般采取增加页面长度的方式,来稀释鼠标滚轮的最小刻度。

但还是会有一些情况出现,如户快拖动进度条时,“掉帧”的情况难免还是会出现。

3类的实现,滚轮只是动画的触发按钮。当用户滚动了一下鼠标,之前设计好的动画就开始播放。当播放结束后,对滚动事件的监听,才会重新被激活。这种设计,弱化了交互,但提供了更优质的动画展现。因为动画的播放时间和帧率不是用户控制的,是事先代码所设定好的。

2类就不说了,介乎与1和3之间。

简单的说,鱼(流畅)与熊掌(操控性)不可得兼。