home-fasthtml / js /previewStack.js
AItool's picture
Upload 210 files
036b3a6 verified
(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)`;
});
})();