为什么?
除了作为一项有趣的练习之外,类似的东西有什么用途呢?没有明显的用途。它就像瓶中船一样无用。但它确实有潜在的用途。它可以激励人们超越网页设计师和开发人员的既定限制。
概述
这个项目是通过将几个空的 div 叠加在一起,并使用透明的 PNG 作为背景图像创建的。
使用 Alexander Farkas 的 jQuery 插件以不同的速度对背景进行动画处理。此效果模拟了一种名为“视差效果”的伪 3D 动画背景,起源于老式的横向卷轴视频游戏。
机器人的组成方式与背景动画场景类似,通过将多个 DIV 叠加在一起创建不同的机器人部件。最后一步是使用一些 jQuery 对机器人进行动画处理。
标记
<div id="wrapper">
<div id="cloud-01">
<div id="cloud-02">
<div id="mountains-03">
<div id="ground">
<div id="full-robot">
<div id="branding"><h1>Robot Head.</h1></div>
<div id="content"><p> Robot Chest.</p></div>
<div id="sec-content"><p> Robot Pelvis.</p></div>
<div id="footer"><p> Robot Legs.</p></div>
</div>
</div>
</div>
</div>
</div>
</div>
div 的结构与我们的图表非常相似。没有一个 DIV 指定了 width 属性,因此它们将扩展以填充显示它们的任何浏览器窗口的大小。**注意:**构成背景场景视差效果的所有图像宽度均为 9999px。远远超过任何常用计算机显示器或电视的宽度。我们将使用 CSS 将背景图像准确地放置在每个特定 div 中我们想要的位置。
样式
此项目的 CSS 与标记一样简单。
h1, p { position: absolute; left: -9999px; }
div {position: relative;}
#wrapper { background: #bedfe4 url(../images/sun.png) no-repeat left -30px; border: 5px solid #402309;}
#cloud-01 { background: url(../images/clouds-01.png) no-repeat left -100px; }
#cloud-02 { background: url(../images/clouds-02.png) no-repeat left top; }
#mountains-03 { background: url(../images/mountain-03.png) no-repeat left bottom; }
#ground { background: url(../images/ground-05.png) no-repeat left bottom; }
#full-robot { width: 271px; }
#branding {
background: url(../images/robot-head.png) no-repeat center top;
width: 271px;
height: 253px;
z-index: 4;
}
#content {
background: url(../images/robot-torso.png) no-repeat center top;
width: 271px;
height: 164px;
z-index: 3;
margin-top: -65px;
}
#sec-content {
background: url(../images/robot-hips.png) no-repeat center top;
width: 271px;
height: 124px;
z-index: 2;
margin-top: -90px;
}
#footer {
background: url('../images/robot-legs.png') no-repeat center top;
width: 271px;
height: 244px;
z-index: 1;
margin-top: -90px;
}
使用绝对定位将任何标题或段落文本拉到屏幕左侧 9999px。然后我们声明页面中的每个 DIV position: relative。通过将所有 DIV 设置为 position: relative;,我们现在可以使用 z-index 属性来反转机器人 DIV 的自然堆叠顺序。
jQuery JavaScript
免责声明:最初用于为机器人制作动画的脚本非常糟糕。编码机器人 的好人们很乐意清理并重写它。
$(document).ready(function(){
$('#cloud-01').css({backgroundPosition: '0 -80px'});
$('#cloud-02').css({backgroundPosition: '0 -30px'});
$('#mountains-03').css({backgroundPosition: '0 50px'});
$('#trees-04').css({backgroundPosition: '0 50px'});
$('#ground').css({backgroundPosition: 'left bottom'});
$('#branding').css({backgroundPosition: 'center 0'});
$('#content').css({backgroundPosition: 'center 0'});
$('#sec-content').css({backgroundPosition: 'center 0'});
$('#footer').css({backgroundPosition: 'center 0'});
$('#wrapper').css({overflow: "hidden"});
$('#klicker').click(function(){
$('#cloud-01').animate({backgroundPosition: '(-500px -80px)'}, 20000);
$('#cloud-02').animate({backgroundPosition: '(-625px -30px)'}, 20000);
$('#mountains-03').animate({backgroundPosition: '(-2500px 50px)'}, 20000);
$('#ground').animate({backgroundPosition: '(-5000px bottom)'}, 20000);
startHim();
$("#full-robot").animate({left:"50%",marginLeft:"-150px"}, 2000);
setTimeout("leaveScreen()",15000);
});
});
var num = 1;
function startHim(){
num++;
$("#sec-content").animate({top:"-=5px"},150).animate({top:"+=5px"},150);
$("#content,#branding").animate({top:"-="+num+"px"},150).animate({top:"+="+num+"px"},150);
if(num<4){
setTimeout("startHim()",300);
} else {
setTimeout("bounceHim()",300);
}
}
function bounceHim(){
$("#sec-content,#branding").animate({top:"-=4px"},150).animate({top:"+=4px"},150);
$("#content").animate({top:"-=8px"},150).animate({top:"+=8px"},150);
setTimeout("bounceHim()",300);
}
function leaveScreen(){
$("#full-robot").animate({left:"100%",marginLeft:"0px"}, 2000);
}
我们首先重新确认所有图像的原始背景位置。
点击 **‘#klicker’** div 时,一个函数告诉 jQuery 将背景从其当前位置动画到为每个 div 指定的坐标。通过将所有不同的图像层分成不同的 DIV,我们可以以不同的速度对背景元素进行动画处理。以不同的速度移动元素会产生 3D 的错觉。我们移动背景中的元素的速度比前景中的元素慢得多。请注意,在此动画中,背景中云的速度比山的速度慢。而山比地面慢,地面是所有元素中最快的。最后,在发出所有这些命令以使背景移动后,**‘#klicker’** 函数调用 **‘startHim()’** 函数。
**‘startHim()’** 函数,你猜对了,启动了我们的机器人。它开始他的小跳跃,并让他移动到 #wrapper div 的中心。**‘startHim()’** 函数调用 **‘bounceHim()’** 函数。然后它继续循环。
我们需要使机器人看起来像是正在崎岖的沙漠道路上弹跳。为了达到这种不规则的弹跳效果,我们将使用 **‘bounceHim()’** 函数。它定位单独的机器人 DIV 并将其“弹跳”5px 向上,然后 5px 向下。但这还不够,所有不同的机器人部件以相同的速率弹跳看起来太僵硬了。我们需要使其看起来更随机且更有趣。因此,我们将获取构成机器人胸部的 div,并以与头部和骨盆部件不同的速率移动它。我们将胸部部分“弹跳”8px 向上和 8px 向下。这使机器人产生了很好的不规则弹跳效果。
**‘leaveScreen()’** 函数是最后调用的函数。15 秒(15000)后,它将机器人向屏幕左侧移动 100%,从而使机器人移到屏幕右侧。
Anthony Calzadilla 是一位来自美国佛罗里达州迈阿密的独立网页设计师。
Chris 的说明
我认为这是一个非常酷的实验。我想说,对于大多数用户而言,最终结果与 Flash 没有区别。然而,与 Flash 相比,它的优势是巨大的。动画的每个部分都是独立的,并且可以轻松地更改/替换。可以通过 JavaScript 文件本身中的数字来调整动画样式,而不是必须更改原始 Flash 文档并重新导出/上传全新的版本。
做得非常好!我建议缓存一些选择器,但这是一个非常棒的概念。
哇,我同意……非常棒!看看我们有时尝试将网页设计推向多远很有趣。我非常喜欢!!!
– Greg
这太酷了。我完全不知道 jQuery 能够进行如此大规模的动画。
我以前见过这个,这是一个非常好的效果,但超出了我的理解范围
太棒了..
:::::::: 我喜欢这部分 :::::::::::;;; ({top:"+="+num+"px"} :::::::: 酷
嘿,伙计们!
这太棒了,我的搭档认为这是 Flash 动画!:D
干得好!
非常酷!我喜欢这种类型的 jQuery 东西!干得好!
非常酷!我喜欢那些从 Flash 中获取功能的东西!
jQuery 能够处理这种“动画”趋势令人印象深刻。我一直右键单击等待查看 Flash Player 弹出窗口,但没有!太棒了!
虽然它实际上并没有什么用,但看到这样的东西仍然非常非常棒。这绝对表明 Flash 和 JavaScript/xHTML 之间的界限正在模糊:干得好,我表示赞赏。
不过语义化程度不高;)。
太棒了!
这完美地概括了它。不得不回去修改动画真是太烦人了。
感谢分享!
Flash 是我存在的梦魇……所以这个非常受欢迎哈哈
干杯
我并不完全同意这种说法。
使用 JavaScript 动画是创建交互式应用程序的绝佳方式,这些应用程序可以优雅地降级(即,您*永远*不会看到“您需要升级到最新版本的 Flash 才能查看此内容”消息)。
使用此类技术意味着您的信息仍然可以轻松地被屏幕阅读器、搜索引擎等访问。并且您仍然可以获得流畅的动画。
简单来说,掌握这项技术就像鱼和熊掌兼得。
-Jason
鼓舞人心!这给了我一个非常有用/教育性的“应用程序”的绝妙想法。
再次感谢。
不错的教程,谢谢..
很棒的横向思维,很高兴看到人们突破界限
非常酷~
我之前是不是见过完全一样的东西?我敢肯定我见过。您是否在另一个网站上写过此内容并之前发布过?
非常棒的东西,我喜欢!但是当我开始动画时,机器人的中段不会保持在原来的位置 - 我正在使用 Opera 9.6
我喜欢它:) 它太漂亮了
jQuery 是一个强大的库,它不断给我留下深刻印象……这是一个非常酷的实验,对于那些非 Flash 用户来说非常有用。
做得好!与我自己的 jQuery Paralax 插件 非常相似
很棒的教程,但用 Flash 做是不是更容易?我的意思是它可能更容易访问,但对于如此简单的事情来说,似乎付出了很多努力。
精彩的突破界限。鼓舞人心。你真棒!
非常好。干得好。
这太 Web 1.0 了!任何设计前沿人士都知道,应该为机器人的鼻子使用节能灯泡!jk =P
P-镇代表!你应该把它做成一个潮人机器人。
我印象深刻.. 开发人员加油!jQuery 加油!
jQuery 万岁!!
大家好,很高兴你们喜欢这个教程。非常感谢 Chris 将其发布在这里!
这是我一段时间以来在网上看到的最令人印象深刻的事情之一。我对 jQuery 比较陌生,最初使用的是 Flash。此后,我放弃了 Flash,转而创建用户友好、搜索引擎友好的网站:www.punklogic.com 在我看来,幕后似乎正在发生一场小小的 JavaScript 革命?您认为它可以取代 Flash 吗?
它的声音如何,它的规模如何?
它永远不会取代 Flash……为什么它应该取代,顺便说一句??
由于大部分功能都在客户端,所以我会说它的扩展性与任何网页一样好。至于取代 Flash,我将给你一个假设,并假设你没有恶意攻击。Flash 是一个二进制的、专有的闭源插件,具有有限数量的工作平台,远少于 HTML/Javascript。用 javascrpt/html/canvas/svg/smil 替换 Flash 是一件非常好的事情。
令人印象深刻
嗨,所有这些 JavaScript 库都很酷,我可以看到它们有一天会在 UI/界面方面取代 Flash……但动画除外。特别是 Flash CS4,它就像一个用于矢量的迷你 AfterEffects。
非常棒的教程。我一直计划在我的网站上添加一些小动画,但不想走 Flash 的路。现在我发现我不必这样做了。
这是与众不同的.. 而且它是迄今为止我见过的最令人印象深刻的事情之一……
嗯……请在 Opera 中测试……
非常酷,我需要这个吗?