这是一款JS和CSS3炫酷3D卡片视觉差动画特效。该卡片特效在鼠标滑过卡片时,卡片的标题和卡片图片之间,会有炫酷的3D视觉差效果,给人以立体的视觉效果。
使用方法
HTML代码
<div class="wrapper"> <div class="panel"> <div class="panel__content-col"> <div class="panel__content"> <div class="panel__text"> <h1 class="panel__title">Tap House</h1> <p class="panel__addr"><span></span>60 Ranelagh Village, Dublin</p> </div> <div class="panel__line"></div> </div> </div> <div class="panel__img-col"> <img src="./img/taphouse.jpg" alt="" class="panel__img"> </div> </div> </div>
CSS代码
html, body { width: 100%; height: 100%; } body { background-color: #292929; color: white; font-size: 18px; font-feature-settings: "kern" 1, "liga" 1, "frac" 1, "lnum" 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } p { font-family: "Lato", sans-serif; } .wrapper { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; padding: 5vh 5%; } .panel { position: relative; display: flex; width: 100%; max-width: 1200px; height: 466px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; pointer-events: none; } .panel__content-col { flex-basis: 25%; } .panel__content { position: absolute; top: 26%; left: 0; z-index: 2; width: 100%; } .panel__text { display: inline-block; text-align: right; } .panel__img-col { flex-basis: 70%; box-shadow: 0px 20px 100.28px 8.72px rgba(0, 0, 0, 0.35); } .panel__title { margin: 0; /* font-family: "Playfair Display", serif;*/ font-size: 96px; font-weight: 900; } .panel__addr { position: relative; display: flex; margin: 16px 0 0; justify-content: flex-end; } .panel__addr span { display: block; margin: 9px 14px 0 0; height: 1px; width: 30px; background-color: #fff; } .panel__line { width: 64%; height: 3px; margin: 24px 0 0 36%; background-color: #fff; } .panel__img-col { width: 100%; } .panel__img { display: block; width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; }
JS代码
<script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenMax.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script> <script> var $body = $('body'), $panel = $('.panel'), $pContent = $('.panel__content'), $img = $('.panel__img-col'); function initTilt() { TweenMax.set([$pContent, $img], { transformStyle: "preserve-3d" }); $body.mousemove(function(e) { tilt(e.pageX, e.pageY); }); }; function tilt(cx, cy) { // var sxPos = cx / $panel.width() * 100 - 100; // var syPos = cy / $panel.height() * 100 - 100; var sxPos = (cx / $body.width() * 100 - 50) * 2; var syPos = (cy / $body.height() * 100 - 50) * 2; TweenMax.to($pContent, 2, { rotationY: -0.03 * sxPos, rotationX: 0.03 * syPos, transformPerspective: 500, transformOrigin: "center center -400", ease: Expo.easeOut }); TweenMax.to($img, 2, { rotationY: -0.03 * sxPos, rotationX: 0.03 * syPos, transformPerspective: 500, transformOrigin: "center center -200", ease: Expo.easeOut }); } $body.mouseleave(function() { tilt($body.width() / 2, $body.height() / 2); }); initTilt(); </script>
codepen网址:https://codepen.io/petebarr/pen/GvKgvQ