tsv*_*der 1 javascript ruby-on-rails hotwire-rails turbo turbo-frames
我在 Rails 应用程序中使用 Turbo Frames,并且在每个页面上都有
<turbo-frame id="messagesFrame" src="/chats">
</turbo-frame>
Run Code Online (Sandbox Code Playgroud)
这可以很好地加载,并且当单击链接时会按预期替换框架。在这个框架中,我设置overflow-y: scroll了在页面上创建一个可滚动框架。每次在框架中加载新页面时,我都希望它滚动到底部。我怎样才能做到这一点?理想情况下使用香草 JavaScript。
小智 5
您可以通过多种方式做到这一点。
涡轮应该火turbo:before-fetch-request,并turbo:before-fetch-response在document触发帧重载时偷懒装框或链接。
你可以这样做:
document.addEventListener("turbo:before-fetch-response", function (e) {
let frame = document.getElementById("messagesFrame");
if (frame.complete) {
frame.scrollTo(0, frame.scrollHeight)
} else {
frame.loaded.then(() => frame.scrollTo(0, frame.scrollHeight))
}
})
Run Code Online (Sandbox Code Playgroud)
来源:Turbo events => https://turbo.hotwired.dev/reference/events
Frame.complete 和 Frame.loaded => https://turbo.hotwired.dev/reference/frames
我建议使用上述方法,因为您指定了 vanilla Javascript。大多数与 Turbo 相关的事情的推荐方法是使用 StimulusJS。
您可以编写一个 Stimulus ( https://stimulus.hotwired.dev/ ) 控制器,将其附加到显示在 TurboFrame 内部的主体中的元素,并在connect方法中执行相同操作。
这样,每当框架内的内容刷新时,Stimulus 控制器就会运行,您不必担心触发事件的顺序。
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |