scrollIntoView是否适用于所有浏览器



scrollIntoView()是否适用于所有浏览器?如果没有,是否有jQuery替代方案?

支持是的,但用户体验…糟糕

正如@9bits所指出的,所有主流浏览器长期以来都支持这一点。不用担心。主要问题是它的工作方式。它只是跳转到一个特定的元素,该元素也可能位于页面的末尾。通过跳转到它,用户不知道是否:

  • 页面已向上滚动
  • 页面已向下滚动
  • 它们已被重定向到其他地方

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

最后一个可能是真的,特别是如果页面的移动标题被滚动出视图,而剩余的页面设计并不意味着在同一页面上有任何内容(如果它也没有任何像左菜单栏那样的总高度垂直元素)。你会惊讶于有多少页面存在这个问题。你自己看看就知道了。转到某个页面,查看顶部,然后按结束键,再查看一次。你可能会认为这是一个不同的页面。

动画scrollintoviewjQuery插件拯救

这就是为什么仍然有一些插件可以执行滚动到视图中,而不是使用本地DOM函数。他们通常动画滚动,这消除了上述所有3个问题。用户可以很容易地跟踪移动。

看起来确实如此:http://www.quirksmode.org/dom/w3c_cssom.html

我使用Matteo Spinnelli的iScroll-4,它也适用于iOS safari。它有三个方法scrollTo、scrollToElement和scrollToPage。假设你有一个无序的元素列表包装在一个div中。正如Robert Koritnik在上面所写的,你需要有一个轻微的动画来显示你已经滚动了。下面的方法达到了这个效果。

scrollToElement(element, time); 

请阅读scrollIntoViewIfNeeded

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

您可以使用jQuery替换并动画化<html><body>元素:

$('html, body').animate({
  scrollTop: $("#myElem").offset().top
}, 1000);

我还没有尝试过,但似乎搭载内置的scrollIntoView函数可以节省很多代码。如果你想要动画动作,我会这么做:

  1. 将容器的当前滚动位置缓存为START position
  2. 运行内置于scrollIntoView
  3. 再次将滚动位置缓存为END position
  4. 将容器返回到起始位置
  5. 动画滚动到结束位置

Css解决了它,伙计们!!我用#idSelected选择了目标id,并用css设置了样式;滚动页边空白顶部";并用rems定义了我的利润率上限(使用任何适合你的衡量标准)。

#idSelected {
   scroll-margin-top: 10rem;
}

相关内容

  • 没有找到相关文章

最新更新