【发布时间】:2012-03-15 19:03:22
【问题描述】:
scrollIntoView() 是否适用于所有浏览器?如果没有,是否有 jQuery 替代方案?
【问题讨论】:
标签: javascript jquery js-scrollintoview
scrollIntoView() 是否适用于所有浏览器?如果没有,是否有 jQuery 替代方案?
【问题讨论】:
标签: javascript jquery js-scrollintoview
【讨论】:
正如@9bits 所指出的,这早已是supported by all major browsers。不用担心。主要问题是它的工作方式。它只是跳转到可能位于页面末尾的特定元素。通过跳转到它,用户不知道是否:
前两个可以通过滚动位置来确定,但谁说用户在跳转完成之前会跟踪滚动位置?所以这是一个不确定的动作。
最后一个可能是真的,特别是如果页面的 moving 标题被滚动到视图之外并且剩余的页面设计并不意味着在同一页面上的任何内容(如果它也没有) t 有任何总高度垂直元素,如左菜单栏)。你会惊讶有多少页面有这个问题。自己检查一下。转到某个页面,在顶部查看它,然后按 End 键并再次查看它。您可能会认为这是一个不同的页面。
scrollintoview jQuery 插件救援这就是为什么仍然有plugins that perform scroll into view 而不是使用原生 DOM 函数的原因。他们通常会为滚动设置动画,从而消除上述所有 3 个问题。用户可以轻松跟踪移动。
【讨论】:
ScrollIntoViewOptions 的新规范允许指定behavior: 'smooth'。不幸的是,无法轻松检测浏览器是否支持此选项……
behavior: "smooth",但不支持 Chrome 或 Safari。
我使用 Matteo Spinnelli 的 iScroll-4,它也适用于 iOS safari。它具有三个方法scrollTo、scrollToElement 和scrollToPage。假设您有一个包含在 div 中的元素的无序列表。正如 Robert Koritnik 上面所写的,你需要有轻微的动画来显示你已经滚动了。下面的方法达到了这个效果。
scrollToElement(element, time);
【讨论】:
没有尝试过,但似乎搭载内置的 scrollIntoView 函数会节省很多代码。如果你想要动画动作,我会这样做:
【讨论】:
请阅读 scrollIntoViewIfNeeded
if(el.scrollIntoViewIfNeeded){
el.scrollIntoViewIfNeeded()
}else{
el.scrollIntoView()
}
【讨论】:
您可以使用 jQuery 替代和动画 <html> 和 <body> 元素:
$('html, body').animate({
scrollTop: $("#myElem").offset().top
}, 1000);
【讨论】: