Files
website-thingy/js/typewriter.js
overspend1 a03b00a8da 🚀 Deploy ROM Mirror Portfolio with Glassmorphism
 Features:
- Enhanced glassmorphism design throughout
- Google Drive ROM mirror integration
- Professional icon system (no emojis)
- GitHub Actions secure deployment
- Responsive design for all devices

🔐 Security:
- API keys protected via GitHub Secrets
- No sensitive data in repository
- Automated security scanning

🎯 ROM Mirror:
- Real Google Drive file browser
- Download tracking and analytics
- Beautiful file management interface
- Mobile-optimized experience
2025-07-07 12:20:46 +02:00

68 lines
1.9 KiB
JavaScript

// Enhanced Typewriter Effect with Authentic Hobbyist Sequence
class TypewriterEffect {
constructor(element, texts, options = {}) {
this.element = element;
this.texts = texts;
this.speed = options.speed || 100;
this.deleteSpeed = options.deleteSpeed || 50;
this.pauseDuration = options.pauseDuration || 1000;
this.currentIndex = 0;
this.currentText = '';
this.isDeleting = false;
this.start();
}
start() {
this.type();
}
type() {
const fullText = this.texts[this.currentIndex];
if (this.isDeleting) {
this.currentText = fullText.substring(0, this.currentText.length - 1);
} else {
this.currentText = fullText.substring(0, this.currentText.length + 1);
}
this.element.textContent = this.currentText;
let typeSpeed = this.speed;
if (this.isDeleting) {
typeSpeed = this.deleteSpeed;
}
if (!this.isDeleting && this.currentText === fullText) {
typeSpeed = this.pauseDuration;
this.isDeleting = true;
} else if (this.isDeleting && this.currentText === '') {
this.isDeleting = false;
this.currentIndex = (this.currentIndex + 1) % this.texts.length;
typeSpeed = 200;
}
setTimeout(() => this.type(), typeSpeed);
}
}
// Initialize typewriter on page load
document.addEventListener('DOMContentLoaded', function() {
const typewriterElement = document.getElementById('typewriter');
if (typewriterElement) {
const texts = [
'Hobby Programmer',
'Home Lab Enthusiast',
'Weekend Tinkerer',
'Tech Explorer',
'ROM Experimenter'
];
new TypewriterEffect(typewriterElement, texts, {
speed: 100,
deleteSpeed: 50,
pauseDuration: 2000
});
}
});