Before & After
A module built for free lancing!
A Pen by Bryan Stoner on CodePen.
A module built for free lancing!
A Pen by Bryan Stoner on CodePen.
.before-and-after | |
img.subject-before(src="https://www.primagames.com/media/images/guides/hero/pikmin-3-wallpaper-1.jpg") | |
.subject-scraper | |
img.subject-after(src="https://www.primagames.com/media/images/guides/hero/pikmin-3-wallpaper-1.jpg") |
var subject = document.querySelector('.before-and-after'); | |
var scraper = document.querySelector('.subject-scraper'); | |
var after = document.querySelector('.subject-after'); | |
var distance = (window.innerWidth - subject.clientWidth) / 2; | |
window.onresize = recalculateDistance; | |
var px = 0; | |
var touches = []; | |
subject.addEventListener('mousemove', dragScraper, false); | |
subject.addEventListener('touchmove', dragScraper, false); | |
function recalculateDistance() { | |
distance = (window.innerWidth - subject.clientWidth) / 2; | |
} | |
function dragScraper(event) { | |
px = event.clientX - distance; | |
if(px == null) { | |
touches = event.touches; | |
px = touches[0].clientX - distance; | |
} | |
if(px < 0) { | |
px = 0; | |
} | |
scraper.style.transform = 'translate(' + px + 'px, 0)'; | |
after.style.transform = 'translate(-' + px + 'px, 0)'; | |
} |
/* ================ | |
// Before and After | |
// ============= */ | |
.before-and-after { | |
position: relative; | |
overflow: hidden; | |
width: 75%; | |
cursor: ew-resize; | |
img { | |
display: block; | |
max-width: 100%; | |
} | |
} | |
.subject-before { | |
position: absolute; | |
top: 0; | |
left: 0; | |
z-index: -2; | |
width: 100%; | |
} | |
.subject-scraper { | |
overflow: hidden; | |
transform: translate(50%, 0); | |
&:before { | |
position: absolute; | |
top: 0; | |
left: 0; | |
z-index: 20; | |
height: 100%; | |
width: .25em; | |
content: ''; | |
background: #fff; | |
} | |
} | |
.subject-after { | |
transform: translate(-50%, 0); | |
filter: grayscale(100%); | |
} | |
/* ================ | |
// Structure | |
// ============= */ | |
html, | |
body { | |
height: 100%; | |
} | |
body { | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} |