95 votes

Impossible de preventDefault dans l'écouteur d'événement passif

J'utilise Liste triable de Framework7 et cela fonctionne bien, juste qu'il ne déclenche pas d'événement lorsque la liste est modifiée.

Donc j'essaie quelques événements intégrés :

$('.sortable-handler').on('touchstart', function (e) {
    e.preventDefault();
    alert('touchstart');
});

$('.sortable-handler').on('touchmove', function (e) {
    e.preventDefault();
    console.log('touchmove');
});

$('.sortable-handler').on('touchcancel', function (e) {
    e.preventDefault();
    console.log('touchcancel');
});

$('.sortable-handler').mouseleave(function (e) {
    e.preventDefault();
    console.log('mouseleave');
});

mais tout ce que j'obtiens est :

Impossible de preventDefault dans l'écouteur d'événement passif en raison de la cible est traitée comme passive. Voir https://www.chromestatus.com/features/5093566007214080

Quel événement dois-je rechercher pour obtenir la liste mise à jour à chaque tri ?

112voto

Rick Byers Points 661

Voir ceci article de blog . Si vous appelez preventDefault sur chaque touchstart alors vous devriez également avoir une règle CSS pour désactiver le défilement tactile, par exemple

.sortable-handler {
  touch-action: none;
}

7 votes

@Rick Byers, comment puis-je ajouter preventDefault() pour wheel mousewheel DOMMouseScroll

0 votes

@Rick Beyers. Pouvez-vous fournir un exemple ? J'ai le même problème avec jquery mobile. swipe événement

1 votes

Extrait du document de développement - Si vous disposez d'un carrousel horizontal, pensez à appliquer la méthode suivante touch-action: pan-y pinch-zoom afin que l'utilisateur puisse toujours faire défiler les pages verticalement et zoomer normalement.

56voto

ranbuch Points 762

Pour moi

document.addEventListener("mousewheel", this.mousewheel.bind(this), { passive: false });

a fait l'affaire (le { passive: false } partie).

28voto

Halfacht Points 122

En JS simple, ajoutez { passive: false } comme troisième argument

document.addEventListener('wheel', function(e) {
    e.preventDefault();
    doStuff(e);
}, { passive: false });

10voto

Pour gérer une liste triable dans Framework7 lorsque l'utilisateur relâche l'élément en cours de tri dans une nouvelle position, vous pouvez utiliser ce code :

  $$('li').on('sortable:sort',function(event){
    alert("From " + event.detail.startIndex + " to " + event.detail.newIndex);
  });

Violon : https://jsfiddle.net/0zf5w4y7/

0 votes

Ah mec, comment t'as su pour l'événement ? Ce n'est pas mentionné dans leur documentation.

2 votes

Ils ont. Ils l'ont mentionné en bas de page. Voir la documentation framework7.io/docs/sortable-list.html#sortable-events

0 votes

Il semble que le même comportement puisse être déclenché avec la fonction Événement de l'instance de l'application sortableSort

7voto

Saurabh Solanki Points 1343

Je rencontre ce problème lorsque j'utilise le carrousel Owl et que je fais défiler les images.

Pour résoudre ce problème, il suffit d'ajouter le CSS ci-dessous dans votre page.

.owl-carousel {
-ms-touch-action: pan-y;
touch-action: pan-y;
}

ou

.owl-carousel {
-ms-touch-action: none;
touch-action: none;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X