commodore-yachting / script.js
bobsmith1010's picture
```
0b1db27 verified
// Magnetic cursor effect
document.addEventListener('DOMContentLoaded', () => {
const cursorDot = document.createElement('div');
const cursorOutline = document.createElement('div');
cursorDot.classList.add('cursor-dot');
cursorOutline.classList.add('cursor-outline');
document.body.appendChild(cursorDot);
document.body.appendChild(cursorOutline);
window.addEventListener('mousemove', (e) => {
const posX = e.clientX;
const posY = e.clientY;
cursorDot.style.left = `${posX}px`;
cursorDot.style.top = `${posY}px`;
// Smooth outline movement
cursorOutline.animate({
left: `${posX}px`,
top: `${posY}px`
}, { duration: 500, fill: 'forwards' });
});
// Hover effects
const hoverElements = document.querySelectorAll('a, button, .card-hover');
hoverElements.forEach(el => {
el.addEventListener('mouseenter', () => {
cursorDot.classList.add('hover');
cursorOutline.classList.add('hover');
});
el.addEventListener('mouseleave', () => {
cursorDot.classList.remove('hover');
cursorOutline.classList.remove('hover');
});
});
// Scroll progress bar
const progressBar = document.createElement('div');
progressBar.classList.add('progress-bar');
document.body.appendChild(progressBar);
window.addEventListener('scroll', () => {
const scrollTop = window.scrollY;
const docHeight = document.body.scrollHeight - window.innerHeight;
const scrollPercent = (scrollTop / docHeight) * 100;
progressBar.style.width = `${scrollPercent}%`;
});
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
window.scrollTo({
top: target.offsetTop - 80,
behavior: 'smooth'
});
}
});
});
});