Bonjour
J’utilse node-red pour un projet de gestion d'énergie perso. J'ai créé une page pour la gestion de mon chauffage électrique. J’augmente un peu le nombre de zones pour mieux gérer ma conso.
Sur cette page, j’ai beaucoup de slider et la page est assez grande avec les programmations horaires.
Le problème, lorsque je descends la page avec la molette de la souris, si je passe sur un slider, ça modifie sa valeur. Si je ne fait pas attention, ça peut être embêtant.
J’essaie depuis un moment de désactivé les événements liés à la molette de la souris pour les sliders sans succès.
Je débute avec node-red et javascript. ChatGPT m’aide bien, je l'avoue. Et m'a donné des pistes pour intercepter l'évènement de la molette et essayer de l'ignorer. Sans succès.
Voici un des code testé
Les évènements sont bien détectés, mais la molette reste toujours active sur les sliders.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 <script> (function() { // Fonction pour désactiver la molette sur un slider function disableSliderWheel(slider) { slider.addEventListener('wheel', (event) => { console.log(`Desactivation molette slider ${slider}`); event.stopImmediatePropagation(); // Empêche tout autre écouteur d'exécuter cet événement event.preventDefault(); // Annule le comportement par défaut }, { passive: false }); // Permet de prévenir explicitement l'événement } // Observer les changements dans le DOM const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === 'childList') { console.log(`Mutation détectée`); // Rechercher tous les sliders ajoutés dynamiquement const sliders = document.querySelectorAll('md-slider'); sliders.forEach((slider) => { if (!slider.dataset.wheelDisabled) { disableSliderWheel(slider); slider.dataset.wheelDisabled = true; // Marquer comme traité } }); } }); }); // Configurer l'observation pour tout le document observer.observe(document.body, { childList: true, subtree: true }); // Désactiver la molette pour les sliders déjà présents au chargement document.addEventListener("DOMContentLoaded", () => { const sliders = document.querySelectorAll('md-slider'); sliders.forEach((slider) => { console.log(`Desactivation molette slider déjà présent ${slider}`); disableSliderWheel(slider); slider.dataset.wheelDisabled = true; }); }); })(); </script>
Partager