Foods
test
Locationpanadura
Client
test
Services
Cinematography
Photography
efrgthyjmgfdszdfc
Photography
tjyngty
These premium images showcase the products vividly, providing a realistic perspective on their appearance and functionality in everyday scenarios.
cinematography
class ElementLoader {
constructor(className = 'loading-element') {
this.className = className;
this.observedElements = new Set();
this.init();
}
init() {
// Mutation Observer for new elements
const mutationObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node.classList?.contains(this.className)) {
this.createLoadingEffect(node);
}
});
});
});
mutationObserver.observe(document.body, {
childList: true,
subtree: true
});
// Initialize loading effect for existing elements
document.querySelectorAll(`.${this.className}`).forEach(element => {
this.createLoadingEffect(element);
});
}
createLoadingEffect(element) {
if (this.observedElements.has(element)) return;
this.observedElements.add(element);
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = element.offsetWidth || element.getAttribute('width') || 300;
canvas.height = element.offsetHeight || element.getAttribute('height') || 200;
canvas.style.position = 'absolute';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.zIndex = '1';
if (getComputedStyle(element).position === 'static') {
element.style.position = 'relative';
}
context.fillStyle = '#f9f9f9';
context.fillRect(0, 0, canvas.width, canvas.height);
let currentLine = 1;
const loadLineHeight = 8; // Increase line height for faster loading
const animate = () => {
context.fillStyle = '#f0f0f0';
context.fillRect(0, currentLine, canvas.width, loadLineHeight);
currentLine += loadLineHeight;
if (currentLine <= canvas.height) {
requestAnimationFrame(animate);
} else {
canvas.remove();
element.classList.remove(this.className);
}
};
element.appendChild(canvas);
requestAnimationFrame(animate);
}
}
// Initialize the loader
new ElementLoader('loading-element');
const style = document.createElement('style');
style.textContent = `
.loading-element {
opacity: 0;
animation: fadeIn 0.3s ease-in forwards;
}
@keyframes fadeIn {
to {
opacity: 1;
}
}
`;
document.head.appendChild(style);
