这是一款使用纯js和CSS3制作的仿宝丽莱Polaroid图片相册画廊。开始时所有的图片被制作为Polaroid图片,堆叠放在一起。当用户使用鼠标hover图片时,图片会展开。点击图片时,最上面的图片会切换到最下面去。
使用方法
HTML结构
该宝丽莱Polaroid图片相册画廊的基本HTML结构如下:
<div class='images'> <img class='image' src='img/1.jpg'> <img class='image' src='img/2.jpg'> <img class='image' src='img/3.jpg'> <img class='image' src='img/4.jpg'> <img class='image' src='img/5.jpg'> </div>
CSS样式
宝丽莱Polaroid图片相册画廊的基本CSS样式如下:
.image { position: absolute; top: 50%; left: 50%; height: 200px; width: 200px; margin-top: -110px; margin-left: -105px; border: 5px solid #fff; border-bottom-width: 15px; -moz-box-shadow: 0 2px 5px rgba(30, 30, 30, 0.25); -webkit-box-shadow: 0 2px 5px rgba(30, 30, 30, 0.25); box-shadow: 0 2px 5px rgba(30, 30, 30, 0.25); z-index: 2; -moz-transition: -moz-transform 0.3s ease-in-out; -o-transition: -o-transform 0.3s ease-in-out; -webkit-transition: -webkit-transform 0.3s ease-in-out; transition: transform 0.3s ease-in-out; } .image:first-child { -moz-transform: rotate(8deg); -ms-transform: rotate(8deg); -webkit-transform: rotate(8deg); transform: rotate(8deg); } .image:nth-child(2) { -moz-transform: rotate(2deg); -ms-transform: rotate(2deg); -webkit-transform: rotate(2deg); transform: rotate(2deg); } .image:nth-child(3) { -moz-transform: rotate(-3deg); -ms-transform: rotate(-3deg); -webkit-transform: rotate(-3deg); transform: rotate(-3deg); } .image:nth-child(4) { -moz-transform: rotate(-10deg); -ms-transform: rotate(-10deg); -webkit-transform: rotate(-10deg); transform: rotate(-10deg); } .image:last-child { -moz-transform: rotate(-5deg); -ms-transform: rotate(-5deg); -webkit-transform: rotate(-5deg); transform: rotate(-5deg); }
当鼠标hover图片时,使用下面的代码来制作图片展开动画效果。
.images:hover .image:nth-child(4) { -moz-transform: rotate(10deg) translateX(50px); -ms-transform: rotate(10deg) translateX(50px); -webkit-transform: rotate(10deg) translateX(50px); transform: rotate(10deg) translateX(50px); } .images:hover .image:nth-child(3) { -moz-transform: rotate(3deg) translateX(75px); -ms-transform: rotate(3deg) translateX(75px); -webkit-transform: rotate(3deg) translateX(75px); transform: rotate(3deg) translateX(75px); } .images:hover .image:nth-child(2) { -moz-transform: rotate(-2deg) translateX(-50px); -ms-transform: rotate(-2deg) translateX(-50px); -webkit-transform: rotate(-2deg) translateX(-50px); transform: rotate(-2deg) translateX(-50px); } .images:hover .image:first-child { -moz-transform: rotate(-8deg) translateX(-75px) translateY(-10px); -ms-transform: rotate(-8deg) translateX(-75px) translateY(-10px); -webkit-transform: rotate(-8deg) translateX(-75px) translateY(-10px); transform: rotate(-8deg) translateX(-75px) translateY(-10px); } .image.slide-right { -moz-transform: rotate(290deg) translateX(250px); -ms-transform: rotate(290deg) translateX(250px); -webkit-transform: rotate(290deg) translateX(250px); transform: rotate(290deg) translateX(250px); } .image.slide-left { -moz-transform: rotate(-290deg) translateX(-250px); -ms-transform: rotate(-290deg) translateX(-250px); -webkit-transform: rotate(-290deg) translateX(-250px); transform: rotate(-290deg) translateX(-250px); } .image.back { z-index: 1; }
JavaScript
最后通过下面的javascript代码来完成鼠标点击的交互动画效果。
(function() { var cssTransition, imageOffset, imageWidth, images, queue, timeout, touch; cssTransition = function() { var body, i, len, style, vendor, vendors; body = document.body || document.documentElement; style = body.style; vendors = ['Moz', 'Webkit', 'O']; if (typeof style['transition'] === 'string') { return true; } for (i = 0, len = vendors.length; i < len; i++) {if (window.CP.shouldStopExecution(1)){break;} vendor = vendors[i]; if (typeof style[vendor + 'Transition'] === 'string') { return true; } } window.CP.exitedLoop(1); return false; }; queue = false; touch = document.documentElement['ontouchstart'] !== void 0; images = document.querySelector('.images'); imageWidth = images.firstElementChild.offsetWidth; imageOffset = images.firstElementChild.offsetLeft; timeout = cssTransition() ? [300, 400] : [0, 0]; images.addEventListener((touch ? 'touchend' : 'click'), function(event) { var direction, lastClassList; if (queue) { return; } queue = true; if (((touch ? event.changedTouches[0].pageX : event.pageX) - imageOffset) > imageWidth / 2) { direction = 'slide-right'; } else { direction = 'slide-left'; } lastClassList = images.lastElementChild.classList; lastClassList.add(direction); return setTimeout(function() { lastClassList.remove(direction); lastClassList.add('back'); return setTimeout(function() { images.insertBefore(images.lastElementChild, images.firstElementChild); lastClassList.remove('back'); return queue = false; }, timeout[0]); }, timeout[1]); }, false); }).call(this);