以下是 仿Apple TV海报视差动画特效 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>仿Apple TV海报视差动画特效</title>
<!--可无视-->
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--必要样式-->
<link rel="stylesheet" href="css/effect-1.css">
</head>
<body>
<article class="htmleaf-container">
<header class="htmleaf-header">
<h1>仿Apple TV海报视差动画特效</h1>
<div class="htmleaf-demo center">
<a href="index.html" class="current">DEMO1</a>
<a href="index2.html">DEMO2</a>
</div>
</header>
<div data-offset="5" class="poster">
<div class="shine"></div>
<div class="layer-1"></div>
<div data-offset="-5" class="layer-2"></div>
<div data-offset="-10" class="layer-3"></div>
<div data-offset="-10" class="layer-4"></div>
<div data-offset="-5" class="layer-5"></div>
</div>
</article>
<script src="js/jquery-2.1.1.min.js" type="text/javascript"></script>
<script src="js/effect-1.js"></script>
</body>
</html>
HTML代码(index2.html):
<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>仿Apple TV海报视差动画特效</title>
<!--可无视-->
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/default.css">
<!--必要样式-->
<link rel="stylesheet" href="css/effect-2.css">
</head>
<body>
<article class="htmleaf-container">
<header class="htmleaf-header">
<h1>仿Apple TV海报视差动画特效</h1>
<div class="htmleaf-demo center">
<a href="index.html" class="current">DEMO1</a>
<a href="index2.html">DEMO2</a>
</div>
</header>
<div data-offset="5" class="poster">
<div class="shine"></div>
<div data-offset="-2" class="layer-1"></div>
<div class="layer-2"></div>
<div data-offset="1" class="layer-3"></div>
<div data-offset="3" class="layer-4"></div>
<div data-offset="10" class="layer-5"></div>
</div>
</article>
<script src="js/jquery-2.1.1.min.js" type="text/javascript"></script>
<script src="js/effect-2.js"></script>
</body>
</html>
JS代码(effect-1.js):
/** * Designed by @Taras Shypka * https://dribbble.com/Bugsster * Coded by @Balaj Marius for @Designmodo * http://mariusbalaj.com | http://designmodo.com */
var $poster = $('.poster'),$shine = $('.shine'),$layer = $('div[class*="layer-"]');
$(window).on('mousemove',function(e){
var w = $(window).width(),//window width h = $(window).height(),//window height offsetX = 0.5 - e.pageX / w,//cursor position X offsetY = 0.5 - e.pageY / h,//cursor position Y dy = e.pageY - h / 2,//@h/2 = center of poster dx = e.pageX - w / 2,//@w/2 = center of poster theta = Math.atan2(dy,dx),//angle between cursor and center of poster in RAD angle = theta * 180 / Math.PI - 90,//convert rad in degrees offsetPoster = $poster.data('offset'),transformPoster = 'translateY(' + -offsetX * offsetPoster + 'px) rotateX(' + (-offsetY * offsetPoster) + 'deg) rotateY(' + (offsetX * (offsetPoster * 2)) + 'deg)';
//poster transform //get angle between 0-360 if (angle < 0){
angle = angle + 360;
}
//gradient angle and opacity $shine.css('background','linear-gradient(' + angle + 'deg,rgba(255,255,255,' + e.pageY / h * .5 + ') 0%,rgba(255,255,255,0) 80%)');
//poster transform $poster.css('transform',transformPoster);
//parallax foreach layer $layer.each(function(){
var $this = $(this),offsetLayer = $this.data('offset') || 0,transformLayer = 'translateX(' + offsetX * offsetLayer + 'px) translateY(' + offsetY * offsetLayer + 'px)';
$this.css('transform',transformLayer);
}
);
}
);
JS代码(effect-2.js):
/** * Designed by @Konstantine Trundayev * https://dribbble.com/k0t * Coded by @Balaj Marius for @Designmodo * http://mariusbalaj.com | http://designmodo.com */
var $poster = $('.poster'),$shine = $('.shine'),$layer = $('div[class*="layer-"]'),w = $(window).width(),//window width h = $(window).height();
//window height$(window).on('mousemove',function(e){
var offsetX = 0.5 - e.pageX / w,//cursor position X offsetY = 0.5 - e.pageY / h,//cursor position Y dy = e.pageY - h / 2,//@h/2 = center of poster dx = e.pageX - w / 2,//@w/2 = center of poster theta = Math.atan2(dy,dx),//angle between cursor and center of poster in RAD angle = theta * 180 / Math.PI - 90,//convert rad in degrees offsetPoster = $poster.data('offset'),transformPoster = 'translateY(' + -offsetX * offsetPoster + 'px) rotateX(' + (-offsetY * offsetPoster) + 'deg) rotateY(' + (offsetX * (offsetPoster * 2)) + 'deg)';
//poster transform //get angle between 0-360 if (angle < 0){
angle = angle + 360;
}
//gradient angle and opacity $shine.css('background','linear-gradient(' + angle + 'deg,rgba(255,255,255,' + e.pageY / h + ') 0%,rgba(255,255,255,0) 80%)');
//poster transform $poster.css('transform',transformPoster);
//parallax foreach layer $layer.each(function(){
var $this = $(this),offsetLayer = $this.data('offset') || 0,transformLayer = 'translateX(' + offsetX * offsetLayer + 'px) translateY(' + offsetY * offsetLayer + 'px)';
$this.css('transform',transformLayer);
}
);
}
);
CSS代码(default.css):
body,html{font-size:100%;padding:0;margin:0;}
/* Reset */
*,*:after,*:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
/* Clearfix hack by Nicolas Gallagher:http://nicolasgallagher.com/micro-clearfix-hack/ */
.clearfix:before,.clearfix:after{content:" ";display:table;}
.clearfix:after{clear:both;}
body{background:#f9f7f6;color:#404d5b;font-weight:500;font-size:1.05em;font-family:"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3","FontAwesome",sans-serif;}
a{color:#2fa0ec;text-decoration:none;outline:none;}
a:hover,a:focus{color:#74777b;}
.htmleaf-container{margin:0 auto;text-align:center;overflow:hidden;}
.htmleaf-content{font-size:150%;padding:1em 0;}
.htmleaf-content h2{margin:0 0 2em;opacity:0.1;}
.htmleaf-content p{margin:1em 0;padding:5em 0 0 0;font-size:0.65em;}
.bgcolor-1{background:#f0efee;}
.bgcolor-2{background:#f9f9f9;}
.bgcolor-3{background:#e8e8e8;}
/*light grey*/
.bgcolor-4{background:#2f3238;color:#fff;}
/*Dark grey*/
.bgcolor-5{background:#df6659;color:#521e18;}
/*pink1*/
.bgcolor-6{background:#2fa8ec;}
/*sky blue*/
.bgcolor-7{background:#d0d6d6;}
/*White tea*/
.bgcolor-8{background:#3d4444;color:#fff;}
/*Dark grey2*/
.bgcolor-9{background:#ef3f52;color:#fff;}
/*pink2*/
.bgcolor-10{background:#64448f;color:#fff;}
/*Violet*/
.bgcolor-11{background:#3755ad;color:#fff;}
/*dark blue*/
.bgcolor-12{background:#3498DB;color:#fff;}
/*light blue*/
/* Header */
.htmleaf-header{padding:1em 190px 1em;letter-spacing:-1px;text-align:center;}
.htmleaf-header h1{font-weight:600;font-size:2em;line-height:1;margin-bottom:0;font-family:"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3","FontAwesome",sans-serif;}
.htmleaf-header h1 span{font-family:"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3","FontAwesome",sans-serif;display:block;font-size:60%;font-weight:400;padding:0.8em 0 0.5em 0;color:#c3c8cd;}
/*nav*/
.htmleaf-demo a{color:#1d7db1;text-decoration:none;}
.htmleaf-demo{width:100%;padding-bottom:1.2em;}
.htmleaf-demo a{display:inline-block;margin:0.5em;padding:0.6em 1em;border:3px solid #1d7db1;font-weight:700;}
.htmleaf-demo a:hover{opacity:0.6;}
.htmleaf-demo a.current{background:#1d7db1;color:#fff;}
/* Top Navigation Style */
.htmleaf-links{position:relative;display:inline-block;white-space:nowrap;font-size:1.5em;text-align:center;}
.htmleaf-links::after{position:absolute;top:0;left:50%;margin-left:-1px;width:2px;height:100%;background:#dbdbdb;content:'';-webkit-transform:rotate3d(0,0,1,22.5deg);transform:rotate3d(0,0,1,22.5deg);}
.htmleaf-icon{display:inline-block;margin:0.5em;padding:0em 0;width:1.5em;text-decoration:none;}
.htmleaf-icon span{display:none;}
.htmleaf-icon:before{margin:0 5px;text-transform:none;font-weight:normal;font-style:normal;font-variant:normal;font-family:'icomoon';line-height:1;speak:none;-webkit-font-smoothing:antialiased;}
/* footer */
.htmleaf-footer{width:100%;padding-top:10px;}
.htmleaf-small{font-size:0.8em;}
.center{text-align:center;}
/****/
.related{position:absolute;top:100%;left:0;width:100%;color:#fff;background:#333;text-align:center;font-size:1.25em;padding:0.5em 0;overflow:hidden;}
.related > a{vertical-align:top;width:calc(100% - 20px);max-width:340px;display:inline-block;text-align:center;margin:20px 10px;padding:25px;font-family:"Segoe UI","Lucida Grande",Helvetica,Arial,"Microsoft YaHei",FreeSans,Arimo,"Droid Sans","wenquanyi micro hei","Hiragino Sans GB","Hiragino Sans GB W3","FontAwesome",sans-serif;}
.related a{display:inline-block;text-align:left;margin:20px auto;padding:10px 20px;opacity:0.8;-webkit-transition:opacity 0.3s;transition:opacity 0.3s;-webkit-backface-visibility:hidden;}
.related a:hover,.related a:active{opacity:1;}
.related a img{max-width:100%;opacity:0.8;border-radius:4px;}
.related a:hover img,.related a:active img{opacity:1;}
.related h3{font-family:"Microsoft YaHei",sans-serif;}
.related a h3{font-weight:300;margin-top:0.15em;color:#fff;}
/* icomoon */
.icon-htmleaf-home-outline:before{content:"\e5000";}
.icon-htmleaf-arrow-forward-outline:before{content:"\e5001";}
@media screen and (max-width:50em){.htmleaf-header{padding:3em 10% 4em;}
.htmleaf-header h1{font-size:1.5em;}
}
@media screen and (max-width:40em){.htmleaf-header h1{font-size:0.8em;}
}
@media screen and (max-width:30em){.htmleaf-header h1{font-size:0.6em;}
}
CSS代码(effect-1.css):
body,html{height:100%;min-height:100%;}
body{background:-webkit-linear-gradient(top,#f6f7fc 0%,#d5e1e8 40%);background:linear-gradient(to bottom,#f6f7fc 0%,#d5e1e8 40%);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:perspective(800px);transform:perspective(800px);}
.btn{text-decoration:none;color:#fff;background:#AEBEC7;font-size:12px;border-radius:3px;padding:10px;text-transform:uppercase;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;box-shadow:0 1px 0 rgba(255,255,255,0.5);position:absolute;left:50%;top:75px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}
.poster{width:320px;height:500px;position:absolute;top:50%;left:50%;margin:-200px 0 0 -160px;border-radius:5px;box-shadow:0 45px 100px rgba(0,0,0,0.4);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;/* overflow:hidden;*/
}
@media only screen and (max-width:768px){.poster{margin:-100px 0 0 -160px;}
}
.poster .shine{position:absolute;top:0;left:0;right:0;bottom:0;background:-webkit-linear-gradient(315deg,rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 60%);background:linear-gradient(135deg,rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 60%);z-index:100;}
.poster div[class*="layer-"]{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-size:100% auto;background-repeat:no-repeat;background-position:0 0;border-radius:5px;}
.poster .layer-1{background-image:url("../img/effect-1/1.png");}
.poster .layer-2{background-image:url("../img/effect-1/2.png");}
.poster .layer-3{background-image:url("../img/effect-1/3.png");}
.poster .layer-4{background-image:url("../img/effect-1/4.png");}
.poster .layer-5{background-image:url("../img/effect-1/5.png");}
CSS代码(effect-2.css):
body,html{height:100%;min-height:100%;}
body{background:-webkit-linear-gradient(top,#f6f7fc 0%,#d5e1e8 40%);background:linear-gradient(to bottom,#f6f7fc 0%,#d5e1e8 40%);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:perspective(800px);transform:perspective(800px);}
.btn{text-decoration:none;color:#fff;background:#AEBEC7;font-size:12px;border-radius:3px;padding:10px;text-transform:uppercase;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;box-shadow:0 1px 0 rgba(255,255,255,0.5);position:absolute;left:50%;top:75px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}
.poster{width:320px;height:500px;position:absolute;top:50%;left:50%;margin:-200px 0 0 -160px;border-radius:5px;box-shadow:0 45px 100px rgba(0,0,0,0.4);overflow:hidden;}
@media only screen and (max-width:768px){.poster{margin:-100px 0 0 -160px;}
}
.poster .shine{position:absolute;top:0;left:0;right:0;bottom:0;background:-webkit-linear-gradient(315deg,rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 60%);background:linear-gradient(135deg,rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 60%);z-index:100;}
.poster div[class*="layer-"]{position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px;background-size:100% auto;background-repeat:no-repeat;background-position:0 0;-webkit-transition:0.1s;transition:0.1s;}
.poster .layer-1{background-image:url("../img/effect-2/1.png");}
.poster .layer-2{background-image:url("../img/effect-2/2.png");}
.poster .layer-3{top:0;bottom:0;left:0;right:0;background-image:url("../img/effect-2/3.png");}
.poster .layer-4{background-image:url("../img/effect-2/4.png");}
.poster .layer-5{background-image:url("../img/effect-2/5.png");}