Main functions
This commit is contained in:
107
.history/public/js/sticky-price_20251026093525.js
Normal file
107
.history/public/js/sticky-price_20251026093525.js
Normal file
@@ -0,0 +1,107 @@
|
||||
// Enhanced Sticky Price Display
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const priceDisplay = document.getElementById('priceDisplay');
|
||||
const currentPrice = document.getElementById('currentPrice');
|
||||
|
||||
if (!priceDisplay) return;
|
||||
|
||||
// Show price display when calculator starts
|
||||
function showPriceDisplay() {
|
||||
if (priceDisplay.classList.contains('hidden')) {
|
||||
priceDisplay.classList.remove('hidden');
|
||||
priceDisplay.classList.add('visible');
|
||||
}
|
||||
}
|
||||
|
||||
// Enhanced scroll behavior
|
||||
let scrollTimeout;
|
||||
window.addEventListener('scroll', function() {
|
||||
const scrollY = window.scrollY;
|
||||
|
||||
// Show/hide based on scroll position
|
||||
if (scrollY > 100) {
|
||||
showPriceDisplay();
|
||||
priceDisplay.classList.add('scrolled');
|
||||
} else {
|
||||
priceDisplay.classList.remove('scrolled');
|
||||
}
|
||||
|
||||
// Clear previous timeout
|
||||
clearTimeout(scrollTimeout);
|
||||
|
||||
// Add subtle bounce effect
|
||||
scrollTimeout = setTimeout(() => {
|
||||
priceDisplay.style.transform = 'translateX(0) scale(1)';
|
||||
}, 150);
|
||||
});
|
||||
|
||||
// Price update animation
|
||||
const originalUpdatePrice = window.updatePrice || function() {};
|
||||
window.updatePrice = function(price, animate = true) {
|
||||
if (currentPrice && animate) {
|
||||
// Add updating animation
|
||||
currentPrice.classList.add('updating');
|
||||
|
||||
// Update price after brief delay
|
||||
setTimeout(() => {
|
||||
currentPrice.textContent = price;
|
||||
currentPrice.classList.remove('updating');
|
||||
}, 150);
|
||||
} else if (currentPrice) {
|
||||
currentPrice.textContent = price;
|
||||
}
|
||||
|
||||
// Show price display when price is calculated
|
||||
showPriceDisplay();
|
||||
|
||||
// Call original function if it exists
|
||||
if (typeof originalUpdatePrice === 'function') {
|
||||
originalUpdatePrice(price, animate);
|
||||
}
|
||||
};
|
||||
|
||||
// Monitor calculator interactions
|
||||
const calculator = document.querySelector('[data-calculator]') || document.querySelector('.calculator-container');
|
||||
if (calculator) {
|
||||
// Show price display when user interacts with calculator
|
||||
const inputs = calculator.querySelectorAll('input, select, button');
|
||||
inputs.forEach(input => {
|
||||
input.addEventListener('change', showPriceDisplay);
|
||||
input.addEventListener('click', showPriceDisplay);
|
||||
});
|
||||
}
|
||||
|
||||
// Enhanced visibility on mobile
|
||||
function handleMobileVisibility() {
|
||||
if (window.innerWidth <= 1024) {
|
||||
priceDisplay.classList.remove('fixed');
|
||||
priceDisplay.classList.add('relative');
|
||||
} else {
|
||||
priceDisplay.classList.remove('relative');
|
||||
priceDisplay.classList.add('fixed');
|
||||
}
|
||||
}
|
||||
|
||||
// Initial check and resize listener
|
||||
handleMobileVisibility();
|
||||
window.addEventListener('resize', handleMobileVisibility);
|
||||
|
||||
// Smooth reveal animation
|
||||
setTimeout(() => {
|
||||
if (priceDisplay && !priceDisplay.classList.contains('hidden')) {
|
||||
priceDisplay.style.transition = 'all 0.5s cubic-bezier(0.4, 0, 0.2, 1)';
|
||||
}
|
||||
}, 100);
|
||||
|
||||
// Auto-show after initial page load
|
||||
setTimeout(showPriceDisplay, 1000);
|
||||
});
|
||||
|
||||
// Helper function for other scripts to trigger price display
|
||||
window.showStickyPrice = function() {
|
||||
const priceDisplay = document.getElementById('priceDisplay');
|
||||
if (priceDisplay) {
|
||||
priceDisplay.classList.remove('hidden');
|
||||
priceDisplay.classList.add('visible');
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user