Maison > interface Web > js tutoriel > Comment empêcher le défilement de l'élément parent lorsque l'élément interne atteint ses limites de défilement ?

Comment empêcher le défilement de l'élément parent lorsque l'élément interne atteint ses limites de défilement ?

DDD
Libérer: 2024-10-27 17:00:02
original
740 Les gens l'ont consulté

How to Prevent Parent Element Scroll When Inner Element Reaches its Scroll Bounds?

Empêcher le défilement d'un élément parent sur les limites de défilement d'un élément interne

Lorsque vous travaillez avec un élément flottant à position fixe avec un contenu défilant, il est souvent souhaitable de empêcher l'élément parent de prendre en charge l'événement de défilement lorsque l'élément interne atteint son haut ou son bas. Cela peut être particulièrement frustrant lorsque l'élément interne a une plage de défilement limitée.

Tentatives infructueuses avec le bouillonnement d'événements

Au départ, il était supposé que stoppropagation() pouvait effectivement bloquer le événement bouillonnant vers l’élément parent. Cependant, il a été constaté que l'événement se propageait toujours, malgré la saisie de la fonction spécifiée.

Solution de gestion des événements de la molette de la souris

L'approche correcte impliquait la gestion directe de l'événement de la molette de la souris. En détectant le wheelDelta de l'événement et en utilisant des facteurs de normalisation spécifiques au navigateur, il est possible de déterminer la direction de défilement (haut/bas) et la quantité de défilement de l'élément.

Gestion des cas extrêmes

Le facteur principal était la gestion des cas extrêmes où l'événement mousewheel poussait la position de défilement au-delà des limites de l'élément interne. En vérifiant si la position de défilement était en haut ou en bas et en l'ajustant en conséquence, il devient possible d'empêcher l'élément parent de défiler dans ces cas.

Solution de travail

Le code jQuery suivant utilise cette approche :

<code class="javascript">$(".Scrollable").bind('mousewheel DOMMouseScroll', function(ev) {
    var $this = $(this),
    scrollTop = this.scrollTop,
    scrollHeight = this.scrollHeight,
    height = $this.innerHeight(),
    delta = (ev.type == 'DOMMouseScroll' ? ev.originalEvent.detail * -40 : ev.originalEvent.wheelDelta),
    up = delta > 0;

    if (!up && -delta > scrollHeight - height - scrollTop) {
        $this.scrollTop(scrollHeight);
        ev.preventDefault();
    } else if (up && delta > scrollTop) {
        $this.scrollTop(0);
        ev.preventDefault();
    }
});</code>
Copier après la connexion

En interceptant et en normalisant l'événement mousewheel, ce code garantit que la position de défilement de l'élément interne reste dans ses limites, empêchant efficacement l'élément parent de défiler lorsque cela est approprié.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal