Spaces:
Sleeping
Sleeping
(function () { | |
const percentageSeen = (element) => { | |
const parent = document.getElementById("stacked-cards-component-demo"); | |
const child = element.children.item(0); | |
// Get the relevant measurements and positions | |
const parentRect = parent.getBoundingClientRect(); | |
const childRect = child.getBoundingClientRect(); | |
if (childRect.bottom < parentRect.bottom) return 100; | |
if (childRect.top > parentRect.bottom) return 0; | |
return Math.round( | |
(Math.abs(parentRect.bottom - childRect.top) / childRect.height) * 100 | |
); | |
}; | |
const stackedCardsSection = document.getElementById( | |
"stacked-cards-component-demo" | |
); | |
const stackedCards = document.getElementById("preview-stacked-cards"); | |
const cardsArray = Array.from(stackedCards.children); | |
stackedCardsSection.addEventListener("scroll", function () { | |
const percentageOfSecondCardSeen = percentageSeen(cardsArray[1]); | |
const percentageOfThirdCardSeen = percentageSeen(cardsArray[2]); | |
cardsArray[0].children.item(0).style.scale = | |
1 - | |
(0.1 * percentageOfSecondCardSeen) / 100 - | |
(0.1 * percentageOfThirdCardSeen) / 100; | |
cardsArray[0].children.item(0).style.opacity = | |
1 - | |
(0.1 * percentageOfSecondCardSeen) / 100 - | |
(0.1 * percentageOfThirdCardSeen) / 100; | |
cardsArray[0].children.item(0).style.filter = `blur(${ | |
(10 * percentageOfSecondCardSeen) / 100 + | |
(10 * percentageOfThirdCardSeen) / 100 | |
}px)`; | |
cardsArray[1].children.item(0).style.scale = | |
1 - (0.1 * percentageOfThirdCardSeen) / 100; | |
cardsArray[1].children.item(0).style.opacity = | |
1 - (0.1 * percentageOfThirdCardSeen) / 100; | |
cardsArray[1].children.item(0).style.filter = `blur(${ | |
(10 * percentageOfThirdCardSeen) / 100 | |
}px)`; | |
}); | |
})(); | |