2016-04-04 21 views
3

Ich versuche, automatisch zu einem Element in einem Flexbox-Container zu scrollen.Scrollen zu Element im Flexbox-Container

Es scrollt an den Anfang des ersten geklickt, aber danach hat es eine harte Zeit Scrollen. Ich hatte etwas sehr ähnliches in einem Nicht-Flexbox-Container. Hier

ist ein zupfen:

http://plnkr.co/edit/kq40NiTqBI81KlRJBLHu?p=preview

Irgendwelche Ideen?

+0

In allen Browsern passiert? Chrome scheint gut zu funktionieren. –

+0

Chrome funktioniert nicht für mich. Wenn ich auf Elemente klicke, scrollen sie nicht immer nach oben. Scheint so, als wenn ich oben in der Liste anfangen würde, würde es korrekt scrollen. Aber wenn ich in der Mitte der Liste bin, nicht so sehr. – lostintranslation

+0

Fügen Sie Javascript, jQuery und CSS-Tags für mehr Aufmerksamkeit hinzu. –

Antwort

4

Verwenden Sie die Eigenschaft offsetTop, um den Bildlaufwert von eingebetteten DOM-Elementen (nicht als Stammverzeichnis) wie eine Flexbox zu erfassen. Gute Diskussion here. Ich subtrahiere 10, um zu verhindern, dass die Divs abgeschnitten werden, tun Sie, was Sie wollen.

$(".items").animate({scrollTop: $element.prop('offsetTop') - 10}, "slow"); 

Working Plunker

EDIT:

Um einen Header oder ein anderes Element Griff, FlexBox oder nicht, subtrahieren nur seine Höhe von scrollTo (eine ID in den Header Zuordnung):

$(".items") 
    .animate(
    { 
     scrollTop: $('#' + id).prop('offsetTop') - 
     document.getElementById('header').offsetHeight - 
     10 // Store this as a .constant if it won't change 

    }, "slow"); 

Working Plunker

+0

Das funktioniert ein bisschen besser. Allerdings habe ich immer noch Probleme, wenn ich über der Rolle Flex-Inhalte habe. Siehe aktualisierter Plocker: http://pnnr.co/edit/kq40NiTqBI81KlRJBLHu?p=preview. Seit seinem flex'ed weiß ich nicht wirklich, wie man versetzt. – lostintranslation

+0

Hallo, siehe oben meine bearbeitete Antwort. Hoffe das funktioniert für dich. –