轨道:涡轮链接回到页面顶部
Rails: Turbolinks back to top of page
我正在为轨道使用涡轮连杆;每当我点击一个链接,页面就会向下滚动到上一页的滚动位置。我希望加载所有页面,使其不会向下滚动(保持在页面顶部)。我不需要涡轮链接来记住我以前的滚动位置。那么,我如何强制页面加载,滚动位置在顶部(0,0)?
我试过
$ ->
window.scrollTo 0,0
但我可能不会约束这个权利。
您可能正在使用旧版本的涡轮连杆。此问题已修复。
尝试更新您的Gemfile以使用更新的版本。我在使用"1.1.1"时遇到了同样的问题,但在切换到"2.2.3"后得到了解决。
am在rails 6上也面临同样的问题。要解决这个问题,您必须告诉浏览器在通过历史记录恢复或重新加载时不要处理滚动。下面是处理位置的综合脚本
;(function () {
// Tell the browser not to handle scrolling when restoring via the history or when reloading
if ('scrollRestoration' in history) history.scrollRestoration = 'manual'
var SCROLL_POSITION = 'scroll-position'
var PAGE_INVALIDATED = 'page-invalidated'
// Patch the reload method to flag that the following page load originated from the page being invalidated
Turbolinks.BrowserAdapter.prototype.reload = function () {
sessionStorage.setItem(PAGE_INVALIDATED, 'true')
location.reload()
}
// Persist the scroll position when leaving a page
addEventListener('beforeunload', function () {
sessionStorage.setItem(
SCROLL_POSITION,
JSON.stringify({
scrollX: scrollX,
scrollY: scrollY,
location: location.href
})
)
})
// When a page is fully loaded:
// 1. Get the persisted scroll position
// 2. If the locations match and the load did not originate from a page invalidation, scroll to the persisted position
// 3. Remove the persisted information
addEventListener('DOMContentLoaded', function (event) {
var scrollPosition = JSON.parse(sessionStorage.getItem(SCROLL_POSITION))
if (shouldScroll(scrollPosition)) {
scrollTo(scrollPosition.scrollX, scrollPosition.scrollY)
}
sessionStorage.removeItem(SCROLL_POSITION)
sessionStorage.removeItem(PAGE_INVALIDATED)
})
function shouldScroll (scrollPosition) {
return (
scrollPosition &&
scrollPosition.location === location.href &&
!JSON.parse(sessionStorage.getItem(PAGE_INVALIDATED))
)
}
})()
原因是Turbolink在没有刷新页面的情况下替换了DOM元素,因此滚动保持在相同的位置。
要进行更改,您需要观察Turbolinks发出的指示页面加载完成的事件,然后开始滚动操作。
试试这个:
$ ->
$(document).on 'page:load', ->
window.scrollTo 0, 0
我在Rails6中遇到了同样的问题,并通过添加解决了这个问题
document.addEventListener("turbolinks:load", function() {
window.scrollTo(0,0)
});
在application.html.erb.的<script>
标签下
这基本上是将EventListener添加到DOM中,每当涡轮链接加载时,它都会自动滚动到页面顶部。
相关文章:
- 阻止在单击链接后转到页面顶部
- 如何使用嵌套的 React 组件从“链接页面”的顶部开始
- 同一域链接正在顶部iFrame中加载,而不是在整个页面上加载
- 轨道:涡轮链接回到页面顶部
- Javascript-点击时阻止JS链接滚动回顶部
- 当外部链接打开Tab时,页面滚动到顶部也固定了导航栏
- 试图在CSS中以顶部标题居中链接,但不会移动
- 防止点击Sennajs中的链接跳到页面顶部
- 为什么当我滚动到我的页面顶部并单击附加表单的链接时,它会向下滚动我
- HTML5 中图像顶部的超链接文本
- 如何阻止页面在单击链接后跳转到顶部
- 包含动态内容的较长页面上的返回顶部链接
- 基础6:单击链接时隐藏顶部栏
- Jquery 对话框滚动到一个链接,如何将其保持在顶部
- CKEDITOR在编辑链接后跳到顶部
- 返回顶部链接隐藏在文本之下
- 出现,消失的“滚动到顶部”链接与jQuery和CSS
- 下行链接更改为滚动上的回到顶部链接
- 当用户滚动时,滚动链接更改为顶部链接
- 滚动回顶部链接是可见的第一次加载