在聚焦元素时,页面无法在Firefox和IE中滚动吗?

时间:2018-08-29 12:46:57

标签: javascript html

我尝试使用focus方法将元素聚焦在页面中。当元素处于聚焦状态时,页面会自动滚动到聚焦的元素中。但是在firefox和IE浏览器中,页面无法正确滚动。因此,我的焦点元素在页面底部可见。

步骤: 在chrome中运行示例,元素将出现在页面中间。 在Firefox中,它将显示在页面底部。

如何解决?

setTimeout(() => {
  document.getElementById('parent-element').focus();
}, 10);
body {
  touch-action: none;
}

#target {
  height: 2000px;
  background-color: aliceblue;
}

#parent-element {
  max-height: 980px;
  width: 400px;
  left: 150px;
  top: 958px;
  display: inline-flex;
  background-color: #fff;
  box-shadow: 0 12px 40px 5px rgba(0, 0, 0, 0.26);
  max-width: 100%;
  min-width: 240px;
  height: auto;
  position: absolute;
}

.Child-element {
  border-bottom: none;
  padding: 18px;
  border-radius: 1px 1px 0 0;
  line-height: 30px;
  background-color: #fff;
}

.childcontent {
  display: block;
  width: 83%;
  color: rgba(0, 0, 0, 0.87);
}
<div id="target">
  <div id="parent-element" role="dialog" tabindex="-1">
    <div class="Child-element">
      <div class="childcontent">Am developer</div>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:0)

我可以提供我发现的experimental替代解决方案,同时试图弄清为什么Firefox不以focus()为中心。

scrollIntoView()将为您工作,只要将div滚动到页面中心即可。同样,它是实验性的,但是我在最新的Chrome和Firefox浏览器中对其进行了测试,并且可以在其中运行。

您可以使用以下内容:

document.getElementById('parent-element').scrollIntoView({behavior: "instant", block: "center"});

您可以从这两个资源检查浏览器的兼容性。 MDNCan I Use