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的行动:
- 将容器的当前滚动位置caching为START POSITION
- 运行内置的scrollIntoView
- 再次caching滚动位置作为END POSITION
- 将容器返回到开始位置
- animation滚动到END POSITION
阅读请关于scrollIntoViewIfNeeded
if(el.scrollIntoViewIfNeeded){ el.scrollIntoViewIfNeeded() }else{ el.scrollIntoView() }