J'ai un défilement div
et je veux avoir un lien lorsque je clique dessus, cela le forcera div
à faire défiler pour voir un élément à l'intérieur. J'ai écrit son JavasSript comme ceci:
document.getElementById(chr).scrollIntoView(true);
mais cela fait défiler toute la page tout en faisant défiler div
elle - même. Comment y remédier?
Je veux le dire comme ça
MyContainerDiv.getElementById(chr).scrollIntoView(true);
javascript
html
scroll
Amr Elgarhy
la source
la source
SetTimeout
dans la$(document).ready({})
fonction et à définirfocus()
l'élément vers lequel vous souhaitez faire défiler. Works for meRéponses:
Vous devez obtenir le décalage supérieur de l'élément dans lequel vous souhaitez faire défiler la vue, par rapport à son parent (le conteneur div défilant):
La variable topPos est maintenant définie sur la distance entre le haut du div défilant et l'élément que vous souhaitez voir visible (en pixels).
Maintenant, nous disons au div de faire défiler jusqu'à cette position en utilisant
scrollTop
:Si vous utilisez le prototype de framework JS, vous feriez la même chose comme ceci:
Encore une fois, cela fera défiler le div afin que l'élément que vous souhaitez voir soit exactement en haut (ou si ce n'est pas possible, défilez aussi loin que possible pour qu'il soit visible).
la source
myElement.offsetTop
déclenchera une redistribution (mise en page thrashing) qui pourrait être un goulot d'étranglement des performancesposition: relative
sinon vous passerez beaucoup de temps à déboguer comme je viens de le faire.overflow-y
propriété surscroll
pour l'élément parent (scrolling_div
), sinon cela ne fonctionnait pas. La valeur css par défaut de laoverflow
propriété estauto
et même si elle rend également possible le défilement manuel, le code js ne fonctionnerait pas (même pas avec{psition: relative}
..)h4
alorsdiv
alorsarticle
tag et seulementarticle
travaillé pour moi.Vous devrez trouver la position de l'élément dans le DIV vers lequel vous voulez faire défiler et définir la propriété scrollTop.
Mise à jour :
Exemple de code pour monter ou descendre
la source
Méthode 1 - Défilement fluide vers un élément à l'intérieur d'un élément
Méthode 2 - Utilisation de Element.scrollIntoView :
Méthode 3 - Utilisation du comportement de défilement CSS :
la source
Pour faire défiler un élément dans la vue d'un div, uniquement si nécessaire, vous pouvez utiliser cette
scrollIfNeeded
fonction:la source
Le code doit être:
Vous voulez faire défiler la différence entre la position supérieure de l'enfant et la position supérieure de div.
Accédez aux éléments enfants en utilisant:
etc....
la source
var chElem = document.getElementById('element_within_div');
et la troisième ligne ne devrait-elle pas être luevar topPos = divElem.offsetTop;
?Si vous utilisez jQuery, vous pouvez faire défiler avec une animation en utilisant ce qui suit:
L'animation est facultative: vous pouvez également prendre la valeur scrollTop calculée ci-dessus et la placer directement dans la propriété scrollTop du conteneur .
la source
JS natif, navigateur croisé, défilement fluide (mise à jour 2020)
Le réglage
ScrollTop
donne le résultat souhaité mais le défilement est très brusque. Utiliserjquery
pour avoir un défilement fluide n'était pas une option. Voici donc un moyen natif de faire le travail qui prend en charge tous les principaux navigateurs. Référence - caniuseC'est tout!
Et voici un extrait de travail pour les douteux -
Mise à jour: comme vous pouvez le constater dans les commentaires, il semble que ce
Element.scrollTo()
ne soit pas pris en charge dans IE11. Donc, si vous ne vous souciez pas d'IE11 (vous ne devriez vraiment pas), n'hésitez pas à l'utiliser dans tous vos projets. Notez que le support existe pour Edge! Vous ne laissez donc pas vraiment vos utilisateurs Edge / Windows derrière;)Référence
la source
scrollTo()
peut être pris en charge dans tous les principaux navigateurs pour lesWindow
objets mais n'est pas pris en charge dans IE ou Edge pour les éléments.window.scrollTo
pas çaElement.scrollTo
. Essayez ceci dans Edge, par exemple, et vérifiez la console: codepen.io/timdown/pen/abzVEMBIl y a deux faits:
1) Le composant scrollIntoView n'est pas pris en charge par safari.
2) JS framework jQuery peut faire le travail comme ceci:
la source
Voici une solution JavaScript pure et simple qui fonctionne pour un nombre cible (valeur pour
scrollTop
), un élément DOM cible ou certains cas de chaîne spéciaux:Et voici quelques exemples d'utilisation:
ou
ou
la source
Un autre exemple d'utilisation de jQuery et animate.
la source
Défilement animé par l'utilisateur
Voici un exemple de comment faire défiler un
<div>
horizontalement par programme, sans JQuery . Pour faire défiler verticalement, vous remplaceriez les écritures de JavaScriptscrollLeft
parscrollTop
, à la place.JSFiddle
https://jsfiddle.net/fNPvf/38536/
HTML
JavaScript
Crédit à Dux .
Défilement animé automatique
De plus, voici des fonctions permettant de faire défiler
<div>
complètement vers la gauche et la droite. La seule chose que nous changeons ici, c'est que nous vérifions si l'extension complète du scroll a été utilisée avant de faire un appel récursif pour faire défiler à nouveau.JSFiddle
https://jsfiddle.net/0nLc2fhh/1/
HTML
JavaScript
la source
C'est ce qui m'a finalement servi
la source
le navigateur fait défiler automatiquement jusqu'à un élément qui obtient le focus, donc ce que vous pouvez également faire pour envelopper l'élément dans lequel vous devez faire défiler
<a>...</a>
, puis lorsque vous avez besoin de faire défiler, définissez simplement le focus sur celaa
la source
Après avoir sélectionné l'élément, utilisez simplement la
scrollIntoView
fonction avec l'option ci-dessous:La réponse à cet article est donc:
la source
étant donné que vous avez un élément div dont vous avez besoin pour faire défiler l'intérieur, essayez ce morceau de code
document.querySelector('div').scroll(x,y)
cela fonctionne avec moi à l'intérieur d'un div avec un parchemin, cela devrait fonctionner avec vous au cas où vous auriez pointé la souris sur cet élément et ensuite essayé de faire défiler vers le bas ou vers le haut. Si cela fonctionne manuellement, cela devrait fonctionner aussi
la source