scrollIntoView是否可以在所有浏览器中使用?

scrollIntoView()是否适用于所有浏览器? 如果不是有一个jQuery替代?

它支持是的,但用户体验是坏的。

正如@ 9bits指出的,这一直以来都受到所有主stream浏览器的支持 。 别担心。 主要的问题是它的工作方式。 它只是跳转到一个特定的元素,可能在页面的末尾。 跳到它,用户不知道是否:

  • 页面已经滚动
  • 页面已经向下滚动
  • 他们已经被redirect到其他地方

前两个可以通过滚动位置确定,但是谁说用户在跳转完成之前跟踪滚动位置? 所以这是一个不确定的行为。

最后一个可能是真实的,特别是如果页面有移动标题滚动视图和剩余的页面devise不意味着在同一页面上的任何东西(如果它也没有任何总高度垂直元素,如左菜单酒吧)。 你会惊讶有多less页面有这个问题。 只是自己检查一下。 转到某个页面,在顶部查看,然后按结束键并再次查看。 很可能你会认为这是一个不同的页面。

animationscrollintoview jQuery插件的救援

这就是为什么仍然有插件,执行滚动到视图,而不是使用本地DOMfunction。 他们通常animation滚动,消除了上面列出的所有3个问题。 用户可以很容易地跟踪移动。

看起来像这样: http : //www.quirksmode.org/dom/w3c_cssom.html

我使用Matteo Spinnelli的iScroll-4 ,它也适用于iOS Safari。 它有三个方法scrollTo,scrollToElement和scrollToPage。 假设你有一个无序的div元素包装的列表。 正如罗伯特·科里特尼克(Robert Koritnik)在上面写的,你需要有一点animation来表明你已经滚动了。 下面的方法达到了这个效果。

 scrollToElement(element, time); 

没有尝试过这个,但似乎捎带在scrollIntoView函数中build立将节省大量的代码。 这是我想要做什么,如果你想animation的行动:

  1. 将容器的当前滚动位置caching为START POSITION
  2. 运行内置的scrollIntoView
  3. 再次caching滚动位置作为END POSITION
  4. 将容器返回到开始位置
  5. animation滚动到END POSITION

阅读请关于scrollIntoViewIfNeeded

 if(el.scrollIntoViewIfNeeded){ el.scrollIntoViewIfNeeded() }else{ el.scrollIntoView() }