2017-01-10 55 views
7

W Angular 1.5 Mam tabelę w <md-content>. Dynamicznie dodam kolumny do tabeli, aw pewnym momencie pojawią się poziome paski przewijania. To jest dobre.Poziomo przewijany stół w Angular md-content

Ale wadą jest to, że nowe kolumny nie są widoczne. W jaki sposób mogę programowo przewijać poziomo, aby nowe kolumny były widoczne?

+3

można pisać kod? –

+0

Używanie [kleju z przeskokiem kątowym] (https://github.com/Luegg/angularjs-scroll-glue) jest wyborem. Możesz użyć 'scroll-klej-right =" sklejony "' do twojego 'md-content' i powinno działać. Mogę zrobić plunarza, jeśli ten garnitur dla ciebie – troig

Odpowiedz

2

Jak napisałem w komentarzu, tutaj masz dyrektywę working plunker przy użyciu dyrektywy angular-scroll-glue.

Kluczem tutaj jest dołączenie dyrektywy scroll-glue-right do twojego md-content.

<md-content scroll-glue-right> 
    ... 
</md-content> 

Zobacz pełny kod here

EDIT: Jeśli chcesz przewinąć programowo zamiast automatycznie jak w pierwszym plunker można wiązać scroll-glue-right do atrybutu kontrolera. Przykład:

<md-content scroll-glue-right="glued"> 
... 
</md-content> 

Kiedy glued jest ustawiony na true, przewijania zostanie zwolniony. plunker robocza here

Nadzieja pomaga

+1

To wydaje się działać ładnie, dzięki! Jedna uwaga: widzę, że nazwałeś moduł 'luegg.directives', ale nie widzę tam żadnych innych dyrektyw. Jakiś powód, dla którego nie nazwałeś tego modułu 'scroll-glue'? –

+0

Witam @Garret Wilson !, który chętnie pomaga i dziękuje za nagrodę. Po prostu postępuję zgodnie z instrukcją użycia angularjs-sceoll-glue (muszę zaimportować luegg.directives, aby z niej skorzystać). Myślę, że możesz nazwać swój moduł, jak tylko chcesz, ale musisz zaimportować dyrektywę jako luegg.directives. – troig

+0

Przepraszam, myślałem, że to twoja dyrektywa! Przekażę moją opinię na temat projektu "kątowego przesuwania kleju". –

2

Pan spojrzał na scrollLeft? Można uzyskać pozycję przewijane elementu, a następnie przewinąć rodzica do tej pozycji:

container.scrollLeft = childToScrollTo.getBoundingClientRect().left; 

Można oczywiście zbudować to do dyrektywy, jeśli potrzeba, lub może po prostu uruchomić coś takiego po dodaniu kolumna. Oto krótkie demo:

var scroll = function(){ 
 
    var container = document.getElementById('container'); 
 
    var childToScrollTo = document.getElementById('scrollto'); 
 
    
 
    container.scrollLeft = childToScrollTo.getBoundingClientRect().left; 
 
}
#container{ 
 
    white-space: nowrap; 
 
    overflow: auto; 
 
    width: 400px; 
 
} 
 

 
.child{ 
 
    display:inline-block; 
 
}
<button onclick="scroll()">scroll</button> 
 
<div id="container"> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child" id="scrollto">scroll here!</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
    <div class="child">child</div> 
 
</div>