turbolinks - 如何使用turbolink保持滚动?

标签 turbolinks

有时,希望在页面访问之间保持滚动位置。

加载数据后,Turbolinks会重置滚动位置。

如何为特定元素禁用它?

最佳答案

我在ES6中的解决方案:

const turbolinksPersistScroll = () => {
  const persistScrollDataAttribute = 'turbolinks-persist-scroll'
  let scrollPosition = null
  let enabled = false

  document.addEventListener('turbolinks:before-visit', (event) => {
    if (enabled)
      scrollPosition = window.scrollY
    else
      scrollPosition = null
    enabled = false
  })

  document.addEventListener('turbolinks:load', (event) => {
    const elements = document.querySelectorAll(`[data-${persistScrollDataAttribute}="true"]`)
    for (let i = 0; i < elements.length; i++) {
      elements[i].addEventListener('click', () => {
        enabled = true
      })
    }

    if (scrollPosition)
      window.scrollTo(0, scrollPosition)
  })
}

turbolinksPersistScroll()

并在您要保留滚动条位置的链接上添加data-turbolinks-persist-scroll=true链接。
<a href="..." data-turbolinks-persist-scroll=true>Link</a>
这也适用于我,也适用于link_to remote: true

关于turbolinks - 如何使用turbolink保持滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679154/

相关文章:

ruby-on-rails-3.2 - 动画页面 :change with turbolinks

jquery - 在 Turbolinks 存在的情况下导航回来时,如何防止 jQuery DataTable 上出现重复的包装器?

javascript - 使用 Bootstrap 的 Rails 4 应用程序中的 JQuery 冲突

javascript - Turbolinks 相当于 window.load 事件

ruby-on-rails - Rails 6 从 turbolinks 升级到 turbo。如何在 application.js 中要求涡轮 rails ?

ios - 在 Web App 和 IOS App 之间持久化用户

javascript - 使用 Turbolinks 5 重构内联 &lt;script&gt; 元素

javascript - Turbolinks 禁止为背景图像添加 Javascript 附加类

turbolinks - 当用户在使用 Turbolinks 时单击后退按钮时,MDL 菜单不起作用

ruby-on-rails - 未定义的方法 `get?' 为 302 :Integer