滚动到 flexbox 容器中的元素
Scroll to element in flexbox container
我正在尝试自动滚动到 flexbox 容器中的元素。
<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");
});
}
}
});
它滚动到单击的第一个项目的顶部,但之后就很难滚动了。我在非 flexbox 容器中有一些非常相似的东西。
这是一个插曲:
http://plnkr.co/edit/kq40NiTqBI81KlRJBLHu?p=preview
有什么想法吗?
使用 offsetTop
属性 来捕获嵌入的 (non-root) DOM 元素的滚动值,如 flexbox。很好的讨论 here。我正在减去10以防止div被切断,按你的意愿做。
$(".items").animate({scrollTop: $element.prop('offsetTop') - 10}, "slow");
编辑:
要处理 header 或其他元素,无论是否为 flexbox,只需从 scrollTo 中减去其高度(为 header 分配一个 id):
$(".items")
.animate(
{
scrollTop: $('#' + id).prop('offsetTop') -
document.getElementById('header').offsetHeight -
10 // Store this as a .constant if it won't change
}, "slow");
我正在尝试自动滚动到 flexbox 容器中的元素。
<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");
});
}
}
});
它滚动到单击的第一个项目的顶部,但之后就很难滚动了。我在非 flexbox 容器中有一些非常相似的东西。
这是一个插曲:
http://plnkr.co/edit/kq40NiTqBI81KlRJBLHu?p=preview
有什么想法吗?
使用 offsetTop
属性 来捕获嵌入的 (non-root) DOM 元素的滚动值,如 flexbox。很好的讨论 here。我正在减去10以防止div被切断,按你的意愿做。
$(".items").animate({scrollTop: $element.prop('offsetTop') - 10}, "slow");
编辑:
要处理 header 或其他元素,无论是否为 flexbox,只需从 scrollTo 中减去其高度(为 header 分配一个 id):
$(".items")
.animate(
{
scrollTop: $('#' + id).prop('offsetTop') -
document.getElementById('header').offsetHeight -
10 // Store this as a .constant if it won't change
}, "slow");