`
天梯梦
  • 浏览: 13729347 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

视差滚动的爱情故事

 
阅读更多

故事说起在一个冰冷幽暗的夜晚上,我正思考的十分重要的人生问题,这周末该去那里happy好呢?是宅在家里好呢,或者宅在家里好呢,还是宅在家里 好呢?这时,万年隐身的QQ竟然浮起浅色聊天框,我去!不得了,居然是女神主动联系我,女神一定是因为我俊朗的五官,185的模特身材而深深地迷恋上我 了,呵呵呵呵呵呵。

 

“诶,谭伟X,你在干嘛呢?”


“没啊,在思考人生。”   难道这是要约我的节奏吗?在妹子前必须保持冷静。
“那个这周我要搞一个游戏宣传的页面,设计师说用【视差滚动】的效果,你能做个demo页给我看看?”

 

。。。。。。。。。没事!虽然跟我预想有点出入,但女神这是在考验我!

 

【定义】

 

所谓的视差滚动,就是在页面滚动过程中,多层次的元素进行不同程度的位移,带来立体的视差效果。还有很多的奇思妙想的展现方式,都是滚动页面触发的,也可称为视差滚动。视差滚动里面最基础的就是切换背景,这点其实一个CSS就满足了

 

【视差滚动原理一】
background-attachment: fixed || scroll || local
默认是scroll,内容跟着背景走,而视差滚动页面里用fixed,背景相对页面固定而不跟内容滚动。

 

很快地我就做出了一个demo出来,还特意配上几张优雅的图片和极富内涵的词句,女神一定会因为我的文采而爱上我的,而且,那些看似简单的“我是内 容”不断重复,其实只要细心就会发现里面隐藏着我的表白,情商如此之高的女神,一定会发现,然后我们就可以幸福的在一起,在爱情的滋润下,我很快就能升职 加薪,当上总经理,出任CEO,赢取白富美,走上人生巅峰。哈哈哈哈哈哈哈哈,诶?好像不用赢取白富美,那就挑战白富美。

 

demo1_base

 

“咦,怎么是静态的,谭伟X,能不能帮我做个会动的那种的视差滚动,麻烦了么么哒~”

 

。。。。。。居然完全没有留意到我溢出的文采和隐藏的表白。。。。。没事!虽然跟我预想有点出入,但女神这是在考验我!

 

【视差滚动原理二】
女神想要些更加丰富的效果,也对,像我这么内涵有档次的程序员,当然要来写非常酷的动画效果。
在原理的demo1的基础上,我在scroll事件上添加一些动画事件。

window.addEventListener('scroll',function(e){
        var scrollTop = window.scrollY;
        if(scrollTop > 0 && scrollTop < articleHeight){
            title1.classList.add('title-anim');
            content1.classList.add('content-anim');
        }else if(scrollTop >= articleHeight && scrollTop < articleHeight*2){
            title2.classList.add('title-anim');
            content2.classList.add('content-anim');
        }else if(scrollTop >= articleHeight*2 && scrollTop < articleHeight*3){
            title3.classList.add('title-anim2');
            content3.classList.add('content-anim');
        }
    })

 

视差滚动的表现方式非常多,滚动到页面某个值后会触发一个CSS3动画,这也是众多视差滚动中常见的一种。

 

demo2_anim

 

(这个Demo使用了CSS3动画,请使用现代浏览器查看)

 

【视差滚动原理三】
视差滚动中最突出的内容就是立体的视差效果,最具有说明代表性的就是超级玛丽的游戏场景

 

supermario

 

当玩家操作马里奥移动时,水管和墙块更马里奥在同一水平层,移动速度最快。天上的白云为中层背景图,移动速度中等。而小山丘是最远的背景图,移动速度最慢。三个层次内容按不同速度移动,就会带来一种立体的视差效果。

 

在dom结构上,把同一层的dom元素都放到一个div里面,html结构如下。

<div id="scene_back" class="scene">
    <img id="pokemon1" src="./img/001.png">
    <img id="pokemon4" src="./img/004.png">
    <img id="pokemon7" src="./img/007.png">
</div>
<div id="scene_center" class="scene">
    <img id="pokemon2" src="./img/002.png">
    <img id="pokemon5" src="./img/005.png">
    <img id="pokemon8" src="./img/008.png">
</div>
<div id="scene_front" class="scene">
    <img id="pokemon3" src="./img/003.png">
    <img id="pokemon6" src="./img/006.png">
    <img id="pokemon9" src="./img/009.png">
</div>

 

在页面滚动过程中,我们获取页面的scrollTop的值,根据不同参数值去设置各自scene的top值,这样滚动页面的时候,不同的速度就出来了

var sceneBack = document.getElementById('scene_back'),
    sceneCenter = document.getElementById('scene_center'),
    sceneFront = document.getElementById('scene_front');
var old_top1 = 0,
    old_top2 = 200,
    old_top3 = 700;
 
addEvent(window,'scroll',onScroll);
onScroll();
 
function onScroll(e){
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    sceneBack.style.top = old_top1+scrollTop*.9+'px';
    sceneCenter.style.top = old_top2+scrollTop*.7+'px';
    sceneFront.style.top = old_top3+scrollTop*.3+'px'; 
}
 
function addEvent(eventTarget, eventType, eventHandler) {
    if (eventTarget.addEventListener) {
        eventTarget.addEventListener(eventType, eventHandler, false);
    } else {
        if (eventTarget.attachEvent) {
            eventType = "on" + eventType;
            eventTarget.attachEvent(eventType, eventHandler);
        } else {
            eventTarget["on" + eventType] = eventHandler;
        }
    }
}

 

由于女神在等待的关系,代码有点搓,也没有做兼容性,但是原理就是这样的。

 

demo3_scene

 

这个Demo在非IE6/7下都能查看,只是,IE8的效果并不太好。Firefox效果最好。

 

这里还有个特殊情况:在Chrome下查看这个Demo请拖动滚动条,而不是滚动鼠标。原因是Chrome浏览器对鼠标的滚动做了优化处理,滚动一个齿轮幅度,其他浏览器是触发十几次scroll事件,而Chrome只会触发一次。只有一帧的动画,大家想想就知道。这里可以考虑加入缓动动画,本Demo是基于原理说明和泡女神,具体可以留意下一篇博客优化篇

 

两个demo完事后,很快地就交到女神手上,这次我在demo特意多加上几句(真的是几句?)表白,女神这次一定能发现的。而且,pokemon都 出来帮忙了,精心挑选的初代御三家来卖萌,女神一定被萌到在我广阔的胸怀,然后爱上我,我在爱情的滋润下,我很快就会升职加薪,当上总经理,出入CEO, 挑战白富美,走上人生巅峰。哈哈哈哈哈哈啊哈。

 

“啊,欧巴好厉害哟~最后一次拜托你,能不能做个滚动的时候角色上下出现的效果。弄完我请你吃饭哟。”

 

。。。。。。居然还是没有留意我的表白。。。但是,女神要请我吃饭了,想想都有点激动。不过请吃饭这事,应该反过来才对,我无数次幻想这样的场景:我在万众瞩目下,大喊“女神我暗恋你好久了,我好喜欢你!我一定会追到你,然后我要带你去吃KFC。”

 

【视差滚动一种效果实现】
上下颠倒出现,这个跟原理三是一样的,唯独就是不是所有的元素都是往上升,而是一些元素上升,一些元素下沉。在计算top值的时候,不是“加上”,变成 “减去”scrollTop就会有相应的效果。亲自试了一下,效果就出来了,但是很明显有个问题,就是上升元素和下沉元素在同一水平线上的时候,这时却不 是在页面正中间。这时候思考一下问题所在就好了。计算top的公式是下面

newTop1 = oldTop1 + scrollTop * x1 ;  // (x是个系数)
newTop2 = oldTop2 - scrollTop * x2 ;   //(x是个系数)

 

我们假设,oldTop为-1000,oldTop2为1000,我们希望滚动到500的时候,两者在同一水平线上,这时newTop1和newTop2都相同为500才能再页面中心(注意不是0,自个想想就明白)。这样得到x1为2,x2为0。代码如下。

var sona = document.getElementById('sona'),
    ahri = document.getElementById('ahri');
var old_top1 = -1000,
    old_top2 = 1000;
 
addEvent(window,'scroll',onScroll);
    onScroll();
 
function onScroll(e){
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    sona.style.top = old_top1+scrollTop*2+'px';
    ahri.style.top = old_top2-scrollTop*0+'px';
}
 
function addEvent(eventTarget, eventType, eventHandler) {
     if (eventTarget.addEventListener) {
         eventTarget.addEventListener(eventType, eventHandler, false);
     } else {
         if (eventTarget.attachEvent) {
            eventType = "on" + eventType;
            eventTarget.attachEvent(eventType, eventHandler);
         } else {
             eventTarget["on" + eventType] = eventHandler;
         }
    }
}

 

所以,如果在多种效果混合使用,希望滚动到某地方的时候,某两个dom元素在同一水平线上且在页面中间,代入参数,得到不同x1,x2即可。

 

demo4_reverse

 

这次精挑细选两个LOL美女来做素材,女神就可以看出我在游戏方面,和游戏方面,还有游戏方面的知识渊博。这次的任务非常简单,我很快的Q回女神。女神也表示了感激之情,并约定在那里吃饭。我们在Q上轻松的聊了起来。气氛也越来越好,看来时机成熟了。

 

我“聊到这么晚了,差不多要睡了”
女神“嗯,都很晚了,今天晚上超冷”
我“妹子,话说你需不需要一个又会暖被子,又会陪着你聊天的男朋。。。”
女神“哈哈,不用了。我男朋友都趴在我身上,看着我跟你聊天很久了。

 

 

。。

 

。。。

 

。。。。。

 

真是一个感动的爱(diao)情(si)故事

yidama

 

原文:视差滚动的爱情故事之优化篇 | 腾讯Web前端 AlloyTeam 团队 Blog | 愿景: 成为业界卓越的Web团队

 

分享到:
评论

相关推荐

    jQuery全屏视差滚动效果

    全屏视差滚动是一种网页设计技术,通过在页面滚动时以不同的速度展示背景图像,创造出深度感和立体感,使用户在浏览时感受到丰富的视觉体验。这种效果常用于网站的首页或产品展示部分,能够吸引用户的注意力并提升...

    视差滚动的爱情故事之优化篇

    视差滚动的爱情故事之优化篇主要探讨的是网页设计中一种流行的视觉效果——视差滚动的实现与优化。这种效果在现代网页设计中被广泛应用,它通过让背景图像以不同的速度移动,创造出深度感和立体感,使用户在浏览网页...

    10个优秀视差滚动插件

    这种效果通常应用于单页网站或者长滚动页面,以增强故事叙述的连贯性和吸引力。下面我们将深入探讨10个优秀的视差滚动插件,并了解它们的特点和应用场景。 1. **ScrollPath** ScrollPath是其中一个插件,它允许...

    vueparallax快速60fps视差滚动效果组件

    在Web设计中,视差滚动效果是一种增强用户体验的流行技术,它使得背景元素以较慢的速度移动,相比于前景元素,从而营造出深度感和立体感。"vue-parallax"就是这样一个专门针对Vue.js设计的组件,它能够帮助开发者...

    html5页面滚动图片视差滚动效果

    HTML5页面滚动图片视差滚动效果是一种现代网页设计技术,它为用户带来了一种沉浸式浏览体验。这种效果使得背景图像在用户滚动页面时以较慢的速度移动,与前景元素形成速度差,从而营造出深度感和立体感,增强视觉...

    jq视差滚动框架特效.zip

    "jq视差滚动框架特效"的核心原理在于监听用户的滚动行为,当页面滚动时,通过计算滚动的距离,调整不同元素的位置。这种技术通常涉及到CSS3的transform属性和translate3d方法,它们能够高效地实现平移效果,同时提高...

    HTML5视差滚动特效

    视差滚动的关键在于JavaScript库的运用,例如Skrollr。Skrollr是一个轻量级的库,专门用于实现视差滚动效果。它通过监听用户的滚动行为,然后根据预设的属性值调整页面元素的位置和透明度等样式,实现动态效果。...

    html视差滚动

    例如,一些品牌网站会用视差滚动来讲述品牌故事,电子商务平台则用它来呈现商品详情。 综上所述,HTML视差滚动是一种富有创意的网页设计技术,通过结合HTML、CSS和JavaScript,可以打造出具有深度感的交互式网页。...

    视差滚动特效.zip

    视差滚动特效是一种流行且富有创意的网页设计技术,它为用户提供了一种独特而引人入胜的浏览体验。在“视差滚动特效.zip”这个压缩包中,可能包含了一个用于实现这种效果的JavaScript插件或者相关代码示例,文件名为...

    jQuery+swiper.js幻灯片图片视差滚动轮播特效

    **jQuery + Swiper.js 幻灯片图片视差滚动轮播特效详解** 在网页设计中,动态效果常常能提升用户体验,使网站更具吸引力。"jQuery + Swiper.js 幻灯片图片视差滚动轮播特效"就是一种常用的技术,它结合了jQuery库的...

    全屏图片视差滚动切换代码.zip

    全屏图片视差滚动切换是一种常见的网页设计技术,它通过创建深度感和动态效果来提升用户的浏览体验。这种效果在现代网页设计中被广泛应用,尤其是用于制作引人入胜的首页或产品展示页面。本资源"全屏图片视差滚动...

    视差滚动实例

    视差滚动是一种网页设计技术,它通过创建深度感和立体感来增强用户的浏览体验。当用户滚动页面时,背景图像以较慢的速度移动,而前景元素则以较快的速度移动,这种速度差产生的视觉效果就称为视差滚动。这种技术常...

    jquery上下页面视差滚动切换效果

    视差滚动可以用于创建引人入胜的故事叙述或展示产品的独特方式。 要实现这个效果,我们需要以下步骤: 1. **引入jQuery库**:首先确保在HTML文件中包含了jQuery库,可以通过CDN链接或者本地文件引用。 ```html ...

    背景视差滚动插件

    标题中的“背景视差滚动插件”是一种网页设计技术,它通过创建背景元素相对于前景元素以不同速度移动的视觉效果,来营造出深度感和立体感。这种效果通常用于提升用户体验,使网页浏览过程更加生动有趣。视差滚动在...

    Web开发视差滚动

    JavaScript是实现视差滚动的关键技术,通过监听滚动事件、计算滚动距离以及动态更新元素样式,可以创建出丰富的视差滚动效果。例如,可以使用`window.pageYOffset`获取当前滚动条的位置,然后根据这个值调整各个...

    支持视差滚动的ScrollView

    标题“支持视差滚动的ScrollView”所指的是一种定制的`ScrollView`实现,它能够使背景图片在用户滚动时以较慢的速度移动,与子控件的滚动速度形成差异,这种差异性滚动可以增强用户的沉浸感,使界面更具吸引力。...

    css3背景图片页面滚动视差效果

    在网页设计中,CSS3(层叠样式表第三版)为开发者带来了许多创新特性,其中“背景图片页面滚动视差效果”是近年来颇受欢迎的一种视觉表现手法。这种效果通过精心设计,使得背景图像在页面滚动时以不同的速度移动,...

    类似愤怒的小鸟场景的视差滚动效果

    在IT行业中,视差滚动是一种常见的网页设计技术,它通过创建深度感和动态效果来增强用户的浏览体验。这种效果在游戏领域,特别是像"愤怒的小鸟"这样的2D游戏里非常常见,它使得背景和前景元素以不同的速度移动,营造...

Global site tag (gtag.js) - Google Analytics