2016-04-04 4 views
3

フレックスボックスコンテナの要素に自動スクロールしようとしています。フレックスボックスコンテナの要素にスクロール

<div class="nav"> 
    <div class="items"> 
    <div ng-repeat="i in items" scroll-on-click> 
     {{i}} click me to scroll to me! 
    </div> 
    </div> 
</div> 

app.directive('scrollOnClick', function() { 
    return { 
    restrict: 'A', 
    link: function(scope, $element) { 
     $element.on('click', function() { 
     $(".items").animate({scrollTop: $element.offset().top}, "slow"); 
     }); 
    } 
    } 
}); 

クリックされた最初の項目の上にスクロールしますが、その後はスクロールが困難です。私は非フレックスボックスコンテナで動作するものと非常によく似たものを持っています。

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

任意のアイデア:ここ

はplunkありますか?

+0

すべてのブラウザで起こっていますか?クロムは正常に動作しているようです。 –

+0

Chromeは私のためには機能しません。要素をクリックすると、常に上にスクロールするわけではありません。リストの先頭から始めると、正しくスクロールされているように見えます。しかし、もし私がリストの真ん中にいたら、それほど多くはありません。 – lostintranslation

+0

Javascriptタグ、jQueryタグ、CSSタグを追加することを検討してください。 –

答えて

4

フレキシボックスのような埋め込まれた(非ルート)DOM要素のスクロール値をキャプチャするoffsetTopプロパティを使用します。良い議論here。私はdivsが中止されるのを止めるために10を引いています。

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

Working Plunker

EDIT:

ヘッダまたは他の要素、フレキシボックスを処理するためか、単にscrollToからの高さを減算(ヘッダにIDを割り当てる):

$(".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

これは少し良く機能しています。しかし、もし私がスクロールの上にflex'edコンテンツを持っていれば、私はまだ問題を抱えています。最新プランナーを参照してください:http://plnkr.co/edit/kq40NiTqBI81KlRJBLHu?p=preview。そのflex'ed以来、私はどのようにオフセットする方法を本当に知りません。 – lostintranslation

+0

こんにちは、上記の私の編集された答えを参照してください。これはあなたのために働くことを望みます。 –

関連する問題