图片/图形

炫酷Apple TV多层背景视觉差特效

阿里云


这是一款使用 jQuery 和 CSS3 制作的炫酷 Apple TV 多层背景视觉差特效。该视觉差特效在鼠标移动时,屏幕中的各个图层会以 3D 的方式跟随旋转。并且带有炫酷的流光效果。

HTML 结构

该 Apple TV 背景视觉差的基本 HTML 结构如下:其中.light 和.light-2 是流光层。余下的 3 个层是背景图片层。

也想出现在这里?联系我们
创客主机
  1. <div class="wrapper">
  2.   <div class="container">
  3.     <div class="layer light"></div>
  4.     <div class="layer light light-2"></div>
  5.     <div class="layer layer-1"></div>
  6.     <div class="layer layer-2"></div>
  7.     <div class="layer layer-3"></div>
  8.   </div>
  9. </div>

CSS 样式

包裹容器.wrapper 设置了固定的高度,定位方式为相对定位,并且设置透视度 perspective 为 800,使其转换为 3D 空间。

  1. .wrapper {
  2.   position: relative;
  3.   height: 800px;
  4.   -webkit-perspective: 800;
  5.   perspective: 800;
  6. }

所有的图层.layer 元素都采用绝对定位,并使用 will-change 属性告诉浏览器对即将执行的 transform 进行优化。

  1. .layer {
  2.   position: absolute;
  3.   will-change: transform;
  4. }

视觉差容器.container 使用绝对定位,相对于包裹容器居中。overflow 属性设置为 hidden,同时设置圆角和阴影效果。并使用 transform-style: preserve-3d;来使所有子元素在 3D 空间中展现。由于 IE 不支持该属性,所以在 IE 中没有 3D 效果。

  1. .container {
  2.   position: absolute;
  3.   left: 50%;
  4.   top: 50%;
  5.   width: 840px;
  6.   height: 500px;
  7.   margin-left: -420px;
  8.   margin-top: -250px;
  9.   background: black;
  10.   overflow: hidden;
  11.   border-radius: 3px;
  12.   -webkit-transform-style: preserve-3d;
  13.   transform-style: preserve-3d;
  14.   will-change: transform;
  15.   box-shadow: 0 60px 100px rgba(0, 0, 0, 0.5);
  16. }

3 个背景图层同样居中定位,使用 transform 属性将其缩小 0.7 倍。

  1. .layer-1,
  2. .layer-2,
  3. .layer-3 {
  4.   top: 50%;
  5.   left: 50%;
  6.   margin-left: -630px;
  7.   margin-top: -375px;
  8.   width: 1260px;
  9.   height: 750px;
  10.   -webkit-transform: scale(0.7);
  11.           transform: scale(0.7);
  12. }
  13. .layer-1 {
  14.   background-image: url(../img/1.jpg);
  15. }
  16.  
  17. .layer-2 {
  18.   background-image: url(../img/2.png);
  19. }
  20.  
  21. .layer-3 {
  22.   background-image: url(../img/3.png);
  23. }

流光层也居中定位,使用椭圆渐变作为背景,并设置背景混合模式 mix-blend-mode 为 color-dodge 模式。并分别为各个层设置背景图像。

  1. .light {
  2.   top: 50%;
  3.   left: 50%;
  4.   margin-left: -840px;
  5.   margin-top: -800px;
  6.   width: 1680px;
  7.   height: 1000px;
  8.   background: -webkit-radial-gradient(ellipse closest-side at center, #6c6c6c, #000000);
  9.   background: radial-gradient(ellipse closest-side at center, #6c6c6c, #000000);
  10.   mix-blend-mode: color-dodge;
  11.   opacity: .6;
  12.   z-index: 3;
  13. }
  14.  
  15. .light-2 {
  16.   z-index: 4;
  17.   background: -webkit-radial-gradient(ellipse closest-side at center, #ffffff, #000000);
  18.   background: radial-gradient(ellipse closest-side at center, #ffffff, #000000);
  19.   mix-blend-mode: screen;
  20.   opacity: .3;
  21. }

JavaScript

该视觉差特效使用 jQuery 代码来处理鼠标移动时为各个图层应用不同的 CSS transform 属性,来达到视觉差效果。

  1. var $body = $('body');
  2.     var WIDTH = $body.width();
  3.     var HEIGHT = $body.height();
  4.     var $ad = $('.container');
  5.     var $light = $ad.find('.light');
  6.     var $layer1 = $ad.find('.layer-1');
  7.     var $layer2 = $ad.find('.layer-2');
  8.     var $layer3 = $ad.find('.layer-3');
  9.  
  10.     function moveAd(e) {
  11.       var xPer = e.clientX / WIDTH;
  12.       var yPer = e.clientY / HEIGHT;
  13.  
  14.       var rotateX = 5 - (yPer * 10);
  15.       var rotateY = -5 + (xPer * 10);
  16.  
  17.       $ad.css({
  18.         transform: 'rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg) '
  19.       });
  20.  
  21.       var translateX = -5 + (xPer * 10);
  22.       var translateY = -5 + (yPer * 10);
  23.  
  24.       $layer2.css({
  25.         transform: 'scale(.7) translateX(' + translateX + 'px) translateY(' + translateY + 'px)'
  26.       });
  27.  
  28.       $layer3.css({
  29.         transform: 'scale(.7) translateX(' + (translateX * 2) + 'px) translateY(' + (translateY * 2) + 'px)'
  30.       });
  31.  
  32.       var lightX = 800 - (xPer * 1600);
  33.       var lightY = 300 - (yPer * 600);
  34.  
  35.       $light.css({
  36.         transform: 'translateX(' + lightX + 'px) translateY(' + lightY + 'px)'
  37.       });
  38.     }
  39.  
  40.     $body.on('mousemove', moveAd);

炫酷 Apple TV 多层背景视觉差特效

已有 379 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!