这是codrops出品的一款HTML5 SVG clipPath炫酷卡片膨胀动画特效。该特效采用网格卡片布局,当用户点击其中一张卡片的时候,伴随一个非常酷的运动效果,它会切换到另一个页面,并变形为封面图片。
该特效的背景网格采用Trianglify插件来制作。使用SVG clipPath来制作卡片的路径变形动画,并使用GSAP来控制和管理整个动画序列。
由于并不是所有的浏览器都支持使用CSS clip-path来剪裁和变形图片,特效中使用SVG clipPath来作为替代。这样可以使这个特效在所有现代浏览器上正常工作,包括IE9。
每一个卡片有两种状态:显示和隐藏。下面是卡片的解绑HTML结构:
<div class="card"> <div class="card__container"> <svg class="card__image"> <!-- SVG image... --> </svg> <div class="card__content"> <i class="card__btn-close fa fa-times"></i> <div class="card__caption"> <h2 class="card__title">Title...</h2> <p class="card__subtitle">Subtitle...</p> </div> <p class="card__copy"> Lorem ipsum dolor sit amet... </p> </div> </div> </div>
基本的CSS样式如下:
.card { position: relative; float: left; width: 29%; height: 0; margin: 2%; padding-bottom: 20%; } .card__container { position: fixed; top: 0; left: 0; overflow-x: hidden; overflow-y: auto; width: 100%; height: 100%; -webkit-overflow-scrolling: touch; }
对于隐藏状态的卡片,特效中设置卡片容器的单位为绝对定位。
.card__container--closed { position: absolute; overflow: hidden; }
为了切换卡片的两种状态,特效中简单的获取卡片的位置,然后将它变为全屏,并将container中的内容放到它里面。
Card.prototype._floatContainer = function(callback) { $(document.body).css('overflow', 'hidden'); var TL = new TimelineLite; // Get the card position on the viewport. var rect = this._container.getBoundingClientRect(); var windowW = window.innerWidth; var track = { width: 0, x: rect.left + (rect.width / 2), y: rect.top + (rect.height / 2), }; // Fix the container to the card position (start point). TL.set(this._container, { width: rect.width, height: rect.height, x: rect.left, y: rect.top, position: 'fixed', overflow: 'hidden' }); // Tween the container (and the track values) to full screen (end point). TL.to([this._container, track], 2, { width: windowW, // This value must be in px in order to correctly update the track width. height: '100%', x: windowW / 2, y: 0, xPercent: -50, ease: Expo.easeInOut, clearProps: 'all', className: '-=' + CLASSES.containerClosed, onUpdate: callback.bind(this, track) }); return TL; };
其它代码请参考源文件。