Я хотел бы использовать атрибут data-autoscroll-block, описанный в Turbo Reference, чтобы установить позицию прокрутки в TOP, когда экран переходит через turbo_frame, но он не находится полностью в верхней позиции. Поскольку панель навигации липкая, я предполагаю, что высота (в частности, 64 пикселя) будет смещена.
<%# Applicable index view %>
<%= turbo_frame_tag "entries", autoscroll: true, data: { autoscroll_block: "start" } do %>
contents
<% end %>
<%# navbar view %>
<header class = "sticky top-0 z-10 bg-white w-full h-16....">
contents
</header>
Любые советы о том, как исправить это, будут оценены.
Вы можете попробовать компенсировать это с помощью css. По какой-то причине фрагмент также прокручивает реальную страницу, просто «Выполнить фрагмент кода» и перейти «Полная страница».
// fake the turbo frame navigation, ignore this part
document.querySelector("turbo-frame a").onclick = event => {
event.preventDefault();
var frame = event.target.closest("turbo-frame");
var data = frame.dataset;
frame.scrollIntoView({
behavior: data.autoscrollBehavior,
block: data.autoscrollBlock
});
}
.scroller {
scroll-snap-type: y;
scroll-padding-block-start: 64px;
}
header {
position: sticky;
top: 0px;
height: 64px;
border: 1px solid;
}
.spacer {height: 50px;}
.spacer-xl {height: 1600px;}
<html class = "scroller">
<body>
<div class = "spacer"></div>
<header>
HEADER. Why you scroll the actual page?! <br> Sorry, Stackoverflow.
</header>
<div class = "spacer"></div>
<turbo-frame autoscroll = "true" data-autoscroll-block = "start" data-autoscroll-behavior = "smooth">
inside the frame <a href = "javascript:void(0);">click me</a>
</turbo-frame>
<div class = "spacer-xl"></div>
</body>
</html>
Большой! Большое спасибо за оперативный и точный ответ.