Gli eventi DOM permettono al tuo codice JavaScript di reagire alle azioni dell'utente e ai cambiamenti nella pagina web. Ecco una panoramica completa degli eventi più importanti.
Altri Cheat Sheet:
Prima di vedere i tipi di eventi, ricorda che per ascoltare un evento usi:
elemento.addEventListener('nomeEvento', function() {
// Il tuo codice qui
});Si attiva quando l'utente clicca su un elemento.
const bottone = document.getElementById('mio-bottone');
bottone.addEventListener('click', function() {
alert('Bottone cliccato!');
});Si attiva quando l'utente fa doppio clic su un elemento.
const immagine = document.querySelector('img');
immagine.addEventListener('dblclick', function() {
this.style.width = '200px';
});Si attiva quando il mouse entra sopra un elemento.
const box = document.querySelector('.box');
box.addEventListener('mouseover', function() {
this.style.backgroundColor = 'lightblue';
});Si attiva quando il mouse esce da un elemento.
box.addEventListener('mouseout', function() {
this.style.backgroundColor = 'white';
});Si attiva quando il mouse si muove all'interno di un elemento.
const area = document.getElementById('area-mouse');
area.addEventListener('mousemove', function(event) {
console.log(`Mouse in posizione: ${event.clientX}, ${event.clientY}`);
});mousedown: quando il pulsante del mouse viene premutomouseup: quando il pulsante del mouse viene rilasciato
const elemento = document.querySelector('.draggable');
elemento.addEventListener('mousedown', function() {
console.log('Inizio trascinamento');
});
elemento.addEventListener('mouseup', function() {
console.log('Fine trascinamento');
});Si attiva quando un tasto viene premuto (si ripete se il tasto rimane premuto).
document.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
console.log('Hai premuto Invio!');
}
});Si attiva quando un tasto viene rilasciato.
const input = document.getElementById('mio-input');
input.addEventListener('keyup', function(event) {
console.log(`Hai rilasciato il tasto: ${event.key}`);
});keydown o keyup.
Si attiva ogni volta che il valore di un input cambia (in tempo reale).
const campoTesto = document.getElementById('nome');
campoTesto.addEventListener('input', function() {
console.log(`Testo digitato: ${this.value}`);
});Si attiva quando il valore di un input cambia E l'elemento perde il focus.
const select = document.querySelector('select');
select.addEventListener('change', function() {
console.log(`Opzione selezionata: ${this.value}`);
});Si attiva quando un form viene inviato.
const form = document.getElementById('mio-form');
form.addEventListener('submit', function(event) {
event.preventDefault(); // Previene l'invio tradizionale
console.log('Form inviato!');
});focus: quando un elemento riceve il focus (viene selezionato)blur: quando un elemento perde il focus
const input = document.querySelector('input');
input.addEventListener('focus', function() {
this.style.borderColor = 'blue';
});
input.addEventListener('blur', function() {
this.style.borderColor = 'gray';
});Si attiva quando la finestra del browser viene ridimensionata.
window.addEventListener('resize', function() {
console.log(`Nuova dimensione: ${window.innerWidth}x${window.innerHeight}`);
});Si attiva quando la pagina o un elemento viene scrollato.
window.addEventListener('scroll', function() {
const scrollTop = window.pageYOffset;
console.log(`Scroll position: ${scrollTop}px`);
});Si attiva quando la pagina è completamente caricata.
window.addEventListener('load', function() {
console.log('Pagina completamente caricata!');
});Si attiva quando l'utente sta per lasciare la pagina.
window.addEventListener('beforeunload', function(event) {
event.returnValue = 'Sei sicuro di voler uscire?';
});touch o librerie specializzate.
Leggi di più qui
const elemento = document.getElementById('draggable');
const target = document.getElementById('drop-zone');
// Rendere l'elemento trascinabile
elemento.draggable = true;Si attiva quando inizia un'operazione di trascinamento.
elemento.addEventListener('dragstart', function(event) {
event.dataTransfer.setData('text/plain', this.id);
console.log('Inizio drag');
});Si attiva quando un elemento viene trascinato sopra un'area di rilascio.
target.addEventListener('dragover', function(event) {
event.preventDefault(); // Necessario per permettere il drop
});Si attiva quando un elemento viene rilasciato in un'area di rilascio.
target.addEventListener('drop', function(event) {
event.preventDefault();
const elementId = event.dataTransfer.getData('text/plain');
const draggedElement = document.getElementById(elementId);
this.appendChild(draggedElement);
console.log('Elemento rilasciato!');
});Per supportare anche i dispositivi mobile, usa gli eventi touch:
// Drag and drop che funziona sia su desktop che mobile
const elemento = document.getElementById('draggable');
let isDragging = false;
function startDrag(e) {
isDragging = true;
// Gestisce sia mouse che touch
const clientX = e.clientX || e.touches[0].clientX;
const clientY = e.clientY || e.touches[0].clientY;
elemento.startX = clientX;
elemento.startY = clientY;
e.preventDefault();
}
function drag(e) {
if (!isDragging) return;
const clientX = e.clientX || e.touches[0].clientX;
const clientY = e.clientY || e.touches[0].clientY;
elemento.style.left = clientX + 'px';
elemento.style.top = clientY + 'px';
e.preventDefault();
}
function stopDrag() {
isDragging = false;
}
// Eventi per desktop
elemento.addEventListener('mousedown', startDrag);
document.addEventListener('mousemove', drag);
document.addEventListener('mouseup', stopDrag);
// Eventi per mobile
elemento.addEventListener('touchstart', startDrag);
document.addEventListener('touchmove', drag);
document.addEventListener('touchend', stopDrag);// ✅ Buono
bottone.addEventListener('click', function() { ... });
// ❌ Evita
// <button onclick="...">function gestore() {
console.log('Cliccato!');
}
// Aggiungi
elemento.addEventListener('click', gestore);
// Rimuovi quando non serve più
elemento.removeEventListener('click', gestore);link.addEventListener('click', function(event) {
event.preventDefault(); // Il link non si aprirà
// Il tuo codice personalizzato qui
});elemento.addEventListener('click', function(event) {
console.log('Elemento cliccato:', event.target);
console.log('Posizione click:', event.clientX, event.clientY);
console.log('Tasto premuto:', event.button);
});Ecco un esempio che combina diversi eventi:
<div id="interactive-box" style="width: 200px; height: 200px; background: lightgray; margin: 20px;">
Interagisci con me!
</div>
<input type="text" id="text-input" placeholder="Scrivi qualcosa...">const box = document.getElementById('interactive-box');
const input = document.getElementById('text-input');
// Eventi del mouse
box.addEventListener('click', function() {
this.style.backgroundColor = 'lightblue';
});
box.addEventListener('mouseover', function() {
this.style.cursor = 'pointer';
});
box.addEventListener('mouseout', function() {
this.style.backgroundColor = 'lightgray';
});
// Eventi di input
input.addEventListener('input', function() {
box.textContent = this.value || 'Interagisci con me!';
});
input.addEventListener('focus', function() {
this.style.borderColor = 'blue';
});
input.addEventListener('blur', function() {
this.style.borderColor = 'gray';
});
// Eventi della tastiera
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
input.value = '';
box.textContent = 'Interagisci con me!';
box.style.backgroundColor = 'lightgray';
}
});Questo esempio mostra come diversi eventi possono lavorare insieme per creare un'esperienza interattiva!