如何基于CSS3和jQuery实现APPLE TV海报视差的效果

这篇文章主要介绍了基于jquery和css3实现apple tv海报视差效果,需要的朋友可以参考下

用CSS和jQuery来实现它,尽量看起来和原效果一样。

如何基于CSS3和jQuery实现APPLE TV海报视差的效果

本教程里,我将使用CSS,HTML和jQuery来创建一个近似Apple TV视差效果,如果你正在阅读,我假设你对上述三种技术都有基本的了解。

废话不多说,开始第一部分。

HTML页面

立即学习“前端免费学习笔记(深入)”;

我们的页面结构像下面这样:

首先,需要一个样式类为 .poster 的 p ,在这个 p 里包含5个其他样式的层 p。在这五个层 p 上有一个 shine p来添加一些闪光效果。

CSS部分

首先,添加以下代码确保网页 body 部分的高度是整个页面高度:

body, html { height: 100%; min-height: 100%; }

再给 body 部分一些背景渐变颜色:

body { background: linear-gradient(to bottom, #f6f7fc 0%,#d5e1e8 40%); }

为了让 .poster 有3D旋转的效果,父容器需要设置透视和变换效果。如我们所见,p的父容器就是 body 本身,所以添加以下CSS代码:

body {  background: linear-gradient(to bottom, #f6f7fc 0%,#d5e1e8 40%);  transform-style: preserve-3d;  transform: perspective(800px);}

现在给卡片设置样式跟大小,让它在页面居中,添加一些圆角跟阴影效果:

.poster {  width: 320px;  height: 500px;  position: absolute;  top: 50%; left: 50%;  margin: -250px 0 0 -160px;  border-radius: 5px;  box-shadow: 0 45px 100px rgba(0, 0, 0, 0.4);  overflow:hidden;}

为了让海报居中,需要设置 position 的值为 absolute,top:50% , ‘left:50%’, 上部的 margin 值是 p 高度的一半的负数,左边的 margin 值是 p 宽度的一半的负数。需要记住的是 .poster 的中心也是整个页面的中心。

阴影效果

我们可以用以下的CSS选择器来选择所有的层:

p[class *= 'layer-']

.poster 已经设计好了,来看看效果。

所以,CSS选择了所有class类名里含有“layer-”的 p。

现在,设置所有的层的 position 值是 absolute, background-repeat 值为 no-repeat, background-position 为 top left, 层背景的大小为100%宽度和自动高度。

p[class*="layer-"] {  position: absolute;  top: -10px; left: -10px;  right: -10px; bottom: -10px;  background-size: 100% auto;  background-repeat: no-repeat;  background-position: 0 0;  transition:0.1s;}

注意到 top,left,right,bottom 的值都是-10px,目的是让层的大小比 poster 的大20px,这样在各个层进行视察效果的时候就不会看到层的边缘部分了。

以下是给每个层添加背景:

.layer-1 {  background-image: url('http://designmodo.com/demo/apple-tv-parallax/images/1.png');}.layer-2 {  background-image: url('http://designmodo.com/demo/apple-tv-parallax/images/2.png');}.layer-3 {  top: 0; bottom: 0;  left: 0; right: 0;  background-image: url('http://designmodo.com/demo/apple-tv-parallax/images/3.png');}.layer-4 {  background-image: url('http://designmodo.com/demo/apple-tv-parallax/images/4.png');}.layer-5 {  background-image: url('http://designmodo.com/demo/apple-tv-parallax/images/5.png');}

在 layer-3 部分, 层不会移动,所以尺寸就不用太大了。

完成静态效果

JavaScript部分

在开始之前,请确保已经引入了jQuery库,否则会报错的。

视差效果的逻辑是这样的,每当鼠标移动的时候,根据光标的位置,.poster 的 transforms:translateY,rotate,rotateY 属性将会改变。光标距离页面左上角越远,动画的效果越明显。

公式就类似于这样的:offsetX=0.5-光标距离页面顶端的位置/宽度。

为了每个元素的值都不一样,将给每一个光标公式返回的值乘以一个自定义的值,返回HTML的代码给每个会有动画的层元素添加 data-offset=数字 的属性。

每一个 .layers 的规则都相同,但是我们给他们应用到 translateY 和 translateX 属性上。

data-offset 属性的值越大,动画的效果越明显,可以改变这些值体验下。

为了代码可读性,我们在JavaScript里给 .poster 赋值给 $poster 变量,.shine 给 $shine 变量,$layer 变量代表所有层,w,h代表页面的宽度和高度。

var $poster = $('.poster'),$shine = $('.shine'),$layer = $('p[class*="layer-"]');

现在,需要考虑下当光标移动的时候获取到光标位置的问题。我们可以用 $(window) 的 mousemove 事件来实现,这个事件会返回一个JavaScript对象,含有我们需要的位置信息和其他一些我们暂时还用不到的变量。

$(window).on('mousemove', function(e) {  var w=e.currentTarget.innerWidth,h=e.currentTarget.innerHeight;  var offsetX = 0.5 - e.pageX / w, /* where e.pageX is our cursor X coordinate */  offsetY = 0.5 - e.pageY / h,  offsetPoster = $poster.data('offset'), /* custom value for animation depth */  transformPoster = 'translateY(' + -offsetX * offsetPoster + 'px) rotateX(' + (-offsetY * offsetPoster) + 'deg) rotateY(' + (offsetX * (offsetPoster * 2)) + 'deg)';  /* apply transform to $poster */  $poster.css('transform', transformPoster);  /* parallax foreach layer */  /* loop thought each layer */  /* get custom parallax value */  /* apply transform */  $layer.each(function() {    var $this = $(this);    var offsetLayer = $this.data('offset') || 0; /* get custom parallax value, if element docent have data-offset, then its 0 */    var transformLayer = 'translateX(' + offsetX * offsetLayer + 'px) translateY(' + offsetY * offsetLayer + 'px)';    $this.css('transform', transformLayer);  });});

下一步,就是用上面解释的公式来计算offsetY和offsetX的值,然后就是把视差效果应用到.posert和每一个海报层。

非常酷啊,现在我们就有了一个有视差效果的小部件了。

如何基于CSS3和jQuery实现APPLE TV海报视差的效果

基本完成

但是还没完,海报上的光泽部分还没设置

现在回到CSS部分,给.shine p 绝对定位,添加一个渐变颜色效果,设置z-index属性值为100,让它在所有层的上面。

.shine {  position: absolute;  top: 0; left: 0; right: 0; bottom: 0;  background: linear-gradient(90deg, rgba(255,255,255,.5) 0%,rgba(255,255,255,0) 60%);  z-index: 100;}

已经有了一个漂亮的闪光层在海报上,但是为了达到更逼真的效果,光照应该随着光标的移动而变化。

如何基于CSS3和jQuery实现APPLE TV海报视差的效果

更逼真些

我们怎么做呢?可能你还记得无聊的初三数学课,当你想着你在学一些你从来都不会用到的公式的时候,我们现在就用到了。

所以,倾斜的角度应该等于光标与海报中心形成三角形的角度的相反值。(还记得吧,海报的中心就是整个页面的中心啊,也就是页面宽度和高度的二分之一)

如何基于CSS3和jQuery实现APPLE TV海报视差的效果

角度示意图

首先,找到光标与页面中心形成的三角形的直角边,光标与中心连线后作出一个直角三角形。

然后用 Math.atan2() 函数得到中心点的角度值。注意这个函数的返回值使用弧度值来表示的,所以我们得在CSS中转换成角的度数,用以下公式:

弧度值*180/pi = 角度值

var $poster = $('.poster');  var $shine = $('.shine');  var $layer = $('p[class *= "layer-"]');  $poster.data("offset",15);  $(window).on('mousemove', function(e) {    var w=e.currentTarget.innerWidth,h=e.currentTarget.innerHeight;    var offsetX = 0.5 - e.pageX / w, /* where e.pageX is our cursor X coordinate */    offsetY = 0.5 - e.pageY / h,    offsetPoster = $poster.data('offset'), /* custom value for animation depth */    transformPoster = 'translateY(' + -offsetX * offsetPoster + 'px) rotateX(' + (-offsetY * offsetPoster) + 'deg) rotateY(' + (offsetX * (offsetPoster * 2)) + 'deg)';    dy = e.pageY - h / 2,    dx = e.pageX - w / 2,    theta = Math.atan2(dy,dx), /* get angle in radians */    angle = theta * 180 / Math.PI; /* convert rad in degrees */    /* apply transform to $poster */    $poster.css('transform', transformPoster);    /* parallax foreach layer */    /* loop thought each layer */    /* get custom parallax value */    /* apply transform */    $layer.each(function() {      var $this = $(this);      var offsetLayer = $this.data('offset') || 0; /* get custom parallax value, if element docent have data-offset, then its 0 */      var transformLayer = 'translateX(' + offsetX * offsetLayer + 'px) translateY(' + offsetY * offsetLayer + 'px)';      $this.css('transform', transformLayer);    });  });

你会发现角度值的范围是从-180到180度,以下代码修复这个问题让角度值从0-360度:

if (angle < 0) {  angle = angle + 360;}

现在角度有了,就可以随着光标的移动来动态改变渐变颜色的角度值:

$shine.css('background', 'linear-gradient(' + (angle - 90) + 'deg, rgba(255,255,255,' + e.pageY / h + ') 0%,rgba(255,255,255,0) 80%)');

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

利用css3制作煽动翅膀的蝴蝶的代码

使用css3和jQuery实现文字跟随鼠标的上下抖动

以上就是如何基于CSS3和jQuery实现APPLE TV海报视差的效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:22:52
下一篇 2025年12月24日 01:23:01

相关推荐

  • 探究CSS引入第三方框架的作用及价值

    CSS引入第三方框架的作用和意义,需要具体代码示例 随着前端技术的迅猛发展,越来越多的前端工程师开始采用第三方框架来简化开发流程并提高工作效率。在CSS的世界里,也有许多优秀的第三方框架可供选择,如Bootstrap、Foundation等。本文将重点讨论CSS引入第三方框架的作用和意义,并通过具体…

    2025年12月24日
    000
  • 如何巧妙运用jQuery和CSS3的动画功能创造出吸引人的网页效果

    如何巧妙运用jQuery和CSS3的动画功能创造出吸引人的网页效果 随着互联网技术的不断进步和发展,网页设计作为传递信息和吸引用户注意力的重要手段,无疑扮演着重要的角色。为了提供更好的用户体验,网页设计师们不断寻求创新与突破。而利用jQuery和CSS3的动画功能,成为了设计师们制造吸引人网页效果的…

    2025年12月24日
    000
  • 创造更多可能性:为什么我们仍然需要CSS3动画,尽管已有jQuery?

    创造更多可能性:为什么我们仍然需要CSS3动画,尽管已有jQuery? 引言:在前端开发中,动画是不可或缺的一部分。它能够为网页增添生动和吸引力,同时也能提高用户体验。随着技术的发展,现在有多种动画实现方式,其中CSS3动画和jQuery是最常用的两种。虽然jQuery已经广泛应用于页面动画的开发,…

    2025年12月24日
    000
  • 应该使用CSS3动画,而不只依赖jQuery:为什么选择更符合未来趋势

    应该使用CSS3动画,而不只依赖jQuery:为什么选择更符合未来趋势 在过去的几年中,web开发人员经常使用jQuery来实现各种动画效果。jQuery是一个功能强大且易于使用的JavaScript库,它简化了DOM操作和事件处理。然而,随着CSS3的出现,现在我们有了一种更加强大和灵活的方式来实…

    2025年12月24日
    100
  • 更新你的网站:为什么要考虑使用CSS3动画而非仅依赖jQuery?

    更新你的网站:为什么要考虑使用CSS3动画而非仅依赖jQuery? 在现代网页设计中,动画效果已经成为吸引用户注意力和提升用户体验的重要组成部分。而在过去,使用jQuery是实现网页动画的主要方法之一。然而,随着CSS3动画的出现,越来越多的开发者开始选择使用CSS3动画来替代或补充jQuery动画…

    2025年12月24日
    000
  • 不必选择:如何巧妙结合CSS3动画和jQuery效果打造高效果的网页

    不必选择:如何巧妙结合CSS3动画和jQuery效果打造高效果的网页 在当今互联网高度发达的时代,网页设计已经成为了让用户感到愉悦并且记忆深刻的关键要素之一。为了实现这一目标,许多前端开发人员开始善用CSS3动画和jQuery效果来提升网页的视觉效果和用户体验。本文将介绍如何巧妙结合CSS3动画和j…

    2025年12月24日
    000
  • CSS3动画为什么要与jQuery结合使用?探索它们的优势组合

    CSS3动画为什么要与jQuery结合使用?探索它们的优势组合 在现代网页设计中,动画效果是提升用户体验的重要组成部分。而CSS3的动画特性以及jQuery这个功能强大的JavaScript库,都能够提供丰富的动画效果。那么为什么要将它们结合使用呢?本文将探索CSS3动画与jQuery结合的优势,并…

    2025年12月24日
    000
  • 既然有了jQuery,为什么CSS3还要有动画功能?了解两者的优缺点

    既然有了jQuery,为什么CSS3还要有动画功能?了解两者的优缺点 随着互联网的发展和用户需求的不断增加,网页动画在网站设计中扮演着越来越重要的角色。为了实现各种各样的动画效果,开发者可以选择使用jQuery或者CSS3来完成。那么,既然有了强大的jQuery,CSS3为什么还要具备动画功能呢?本…

    2025年12月24日
    000
  • CSS3动画与jQuery混搭:结合两者的优点,创造出前所未有的网页效果

    CSS3动画与jQuery混搭:结合两者的优点,创造出前所未有的网页效果 随着互联网的发展,网页设计的要求越来越高,我们希望能给用户呈现更多吸引人的效果。而CSS3动画和jQuery是两种常用的网页动效制作工具,它们各自有着独特的特点和优势。本文将介绍如何将CSS3动画与jQuery相结合,来创造出…

    2025年12月24日
    000
  • jQuery与CSS3动画功能有何不同?优劣对比

    jQuery与CSS3动画功能有何不同?优劣对比 引言: 如今,网页设计已经越来越注重用户体验。而动画效果作为增强用户体验的重要手段之一,在网页设计中扮演着重要角色。在实现动画效果的过程中,开发者面临着选择使用jQuery还是CSS3动画的问题。本文将对两者进行对比分析,探讨其优劣之处,并为读者提供…

    2025年12月24日
    000
  • CSS3动画与jQuery的比较:选择适合您项目需求的技术

    CSS3动画与jQuery的比较:选择适合您项目需求的技术 引言: 在前端开发中,动画效果是提升用户体验的重要组成部分。在过去,开发人员主要使用jQuery来实现页面上的动画效果。然而,随着CSS3的发展,它提供了强大的动画功能,使得使用纯CSS来实现动画效果成为可能。本文将对CSS3动画和jQue…

    2025年12月24日
    000
  • 带你使用CSS+jQuery实现一个文字转语音机器人

    本篇文章手把手带大家使用css+jquery实现一个文字转语音机器人,希望对大家有所帮助! 素材 机器人眼睛 【推荐学习:css视频教程、jQuery视频教程、web前端视频】 立即学习“前端免费学习笔记(深入)”; 页面布局 机器人样式参考了下图,通过css拼造型的方式进行实现。部分还原了设计图 …

    2025年12月24日
    000
  • jq怎么写css样式

    方法如下:一般要在页面初始化的时候就要加载样式,所以使用ready()方法,语法格式为“$(document).ready(function)”。当DOM已经加载,并且页面(包括图像)已经完全呈现时,会发生ready事件。 本教程操作环境:windows7系统、CSS3&&HTML5…

    2025年12月24日
    000
  • jq如何动态添加动态css样式

    jq动态添加动态css样式的方法:首先准备jquery库文件,并声明一个class样式;然后准备一个事件加载初始化的方法,并直接用匿名函数;接着addClass方法给div元素添加class;最后通过css方法进行级联的更改。 本教程操作环境:windows7系统、css3&&jqu…

    2025年12月24日 好文分享
    000
  • 浅谈jQuery+CSS实现前端网页加载进度条的三种方式

    【推荐教程:CSS视频教程 】 前端网页加载进度条的实现有三种方式,看自己需求: 一、顶部进度条 在html代码中间插入jq代码  执行动画。页面加载到哪部分,进度条就会相应的向前走多少 立即学习“前端免费学习笔记(深入)”; 当全部加载完成后将loading进度条模块隐藏 顶部进度条 .loadi…

    2025年12月24日 好文分享
    000
  • 如何区分css中的:not()选择器和jQuery中的.not()方法?(代码示例)

    本篇文章给大家带来的内容是介绍如何区分css中的:not()选择器和jquery中的.not()方法?(代码示例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 因为老是将这两个的not方法弄混,所以写一下备忘。 css中:not()选择器用法 :not 伪类选择器可以筛选不符合…

    好文分享 2025年12月24日
    000
  • 关于jQuery浏览器CSS3特写兼容的介绍

    这篇文章主要介绍了jquery浏览器css3特写兼容的方法,实例分析了jquery兼容浏览器的使用技巧,需要的朋友可以参考下 本文实例讲述了jQuery浏览器CSS3特写兼容的方法。分享给大家供大家参考。具体分析如下: CSS3充分吸收多年了web发展的需求,吸收了很多新颖的特性。例如border-…

    好文分享 2025年12月24日
    000
  • CSS3和jQuery实现跟随鼠标方位的Hover特效

    这篇文章主要介绍了基于css3和jquery实现跟随鼠标方位的hover特效的相关资料,需要的朋友可以参考下 今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果。当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑…

    好文分享 2025年12月24日
    000
  • jquery动态添加和遍历option的方法

    这次给大家带来jquery动态添加和遍历option的方法,jquery动态添加遍历option的注意事项有哪些,下面就是实战案例,一起来看一下。 实例如下所示: 全部 os2 os2-anthonos os2-apps os2-centralpoint kf5-experimental //动态添…

    好文分享 2025年12月24日
    000
  • jquery点击回车键实现登录效果实例分享

    最近在做项目登录时,每次都需要点击登录按钮才可以进入相应的页面,给用户一个很不好的体验,所以我就添加使用回车键来实现登录。本文主要为大家分享一篇jquery点击回车键实现登录效果并默认焦点的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 方法: 登录$(fu…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信