javascript - Pourquoi l'événement scroll n'empêche-t-il pas le bouillonnement?
PHP中文网
PHP中文网 2017-07-05 11:07:59
0
6
4147

L'exigence est que lorsque la souris est à l'intérieur d'un élément avec une barre de défilement sur la page, l'événement scroll est déclenché pour empêcher le défilement du corps d'être déclenché en même temps.

Pour parler franchement : lorsque la souris roule à l’intérieur de p, même si p roule jusqu’au bout, le corps ne défilera pas.


J'ai donné à p un événement de défilement pour éviter les bulles. Je veux utiliser cette idée pour désactiver le défilement du corps, mais cela ne sert à rien.
Alors la question se pose :
1. Comment réaliser cette exigence ?
2. Pourquoi le défilement ne peut-il pas empêcher les bulles ?
3. Je connais déjà cette méthode de donner du corpsoverflow:hidden. Si cette méthode est utilisée, le problème réside dans la détermination si la position de la souris est dans p. Il existe de nombreux problèmes de compatibilité, et il semble que la position du déclencheur doive être obtenue par la pratique (comme mousemove). Concernant cette solution, je ne le fais pas. Je ne sais pas s'il existe une solution plus pratique pour l'écriture ou des améliorations ?


27 mai

Merci à tous d'avoir apporté la démo ! ! !
Les méthodes que j'ai trouvées en ligne utilisent également scrollTop, mais je n'ai jamais trouvé de méthode plus pratique, et elles sont toutes écrites de manière très compliquée.
Merci àcc_christianpour nous avoir fourni cette version très claire et pratique~cc_christian提供这个非常清晰实用的版本~
当然,浴巾Bien sûr, le plug-in jq fourni par

est plus puissant et peut être considéré comme parfait~


Il semble que la compatibilité de ce problème de défilement ne soit effectivement pas très bonne. Les deux méthodes utiles sont toutes deux jq.
Et j'ai trouvé un problème. En fait, j'ai déjà trouvé beaucoup d'idées scrollTop sur Internet, mais je suis toujours confus, pourquoi mon propre événement ne peut-il pas être arrêté ? Surtout la molette de la souris, scroll indique sur MDN qu'il ne peut pas annuler le bouillonnement, mais la molette de la souris dit que c'est possible, mais cela ne fonctionne toujours pas en utilisation réelle.
Le seul moyen est de stocker la position de défilement et d'attribuer une valeur à scrollTop lorsque le survol défile vers le haut.浴巾On estime que
a le même principe à l'intérieur du plug-in (je ne l'ai pas vraiment vu, j'ai peur de ne pas pouvoir tout comprendre pour le moment)

Mais pourquoi la molette de la souris ne peut-elle pas le faire ? Pourquoi n'arrive-t-il pas à arrêter de bouillonner ? Maintenant que l’exigence a été parfaitement mise en œuvre, je veux juste en savoir plus sur les principes derrière l’événement original.
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous (6)
给我你的怀抱
  1. Plug-in jQuery : http://mohammadyounes.github....

  2. Problème de performances
    Lorsque la molette défile d'une image, l'événement de défilement n'est déclenché qu'une seule fois
    L'événement de défilement est déclenché en continu depuis l'introduction du défilement fluide (en fait, IE6 a déjà un défilement fluide), à chaque fois que la molette de défilement défile. 1 pixel, l'événement scroll sera déclenché

  3. Il n'est pas recommandé de basculer à plusieurs reprises entreoverflow:hiddenoverflow:hiddencar cela entraînerait des problèmes de refonte et de performances


Principe :
L'événement Scroll ne peut ni stopPropagation ni PreventDefault
Il semble qu'il bloque l'événement scroll, mais il s'agit en fait de l'événement de roue/bouton de page PreventDefault

De plus, la molette de la souris a des problèmes de compatibilité, donc tout le monde utilise jQuery

    我想大声告诉你

    J'ai oublié où j'ai lu l'article correspondant
    Prenez la démo

      小葫芦

      Apprenez-vous une recette, définissez une variable isScrolling = false

      ;

      Lorsque la souris survole la cible p, isScrolling = true ; et pour le corps, lorsque isScrolling = true, le défilement est interdit.

      document.onmousewheel = function(e){ e = e || event; if(isScrolling){ e.preventDefault(); return false; } };
      Et lorsque la souris s'éloigne de p, isScrolling = false.

        扔个三星炸死你

        démo de blocage du défilement

        //阻止事件冒泡 $.stopEvent = function (e) { if (e && e.stopPropagation) { e.stopPropagation() } else { window.event.cancelBubble = true } }; //阻止浏览器默认行为 $.stopDefault = function (e) { if (e && e.preventDefault) { e.preventDefault() } else { window.event.returnValue = false } };
          学霸

          D'accord, personne ne continue.

          La méthode actuellement disponible est toujours overflowhidden.

          Quant à la raison pour laquelle le défilement ne peut pas empêcher les bulles, j'ai trouvé la réponse sur MDN : il dit que le défilement ne fait que des bulles vers document.defaultView et ne peut pas être annulé.

          Mais mdn a dit que la molette de la souris peut empêcher le bouillonnement, mais je l'ai essayé sans succès. J'espère que les étudiants qui savent l'utiliser pourront écrire une démo pour y jeter un œil~

          .
            世界只因有你

            Essayez l'événement mousewheel

              Derniers téléchargements
              Plus>
              effets Web
              Code source du site Web
              Matériel du site Web
              Modèle frontal
              À propos de nous Clause de non-responsabilité Sitemap
              Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!