下面是一个可能的实现:

HTML代码:

<div id='ancestor' style='width: 400px; height: 300px; overflow: auto;'>
  <div id='parent' style='width: 800px; height: 600px;'>
    <div id='child' style='width: 200px; height: 200px; background-color: #ccc; position: relative; left: 50%; top: 50%; transform: translate(-50%, -50%);'>
      <div id='grandchild' style='width: 50px; height: 50px; background-color: #f00;'></div>
    </div>
  </div>
</div>

CSS代码:

#ancestor::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}

#ancestor::-webkit-scrollbar-thumb {
  background-color: #999;
  border-radius: 5px;
}

#parent {
  box-sizing: border-box;
}

#child {
  box-sizing: border-box;
}

#grandchild {
  box-sizing: border-box;
}

JS代码:

var ancestor = document.getElementById('ancestor');
var parent = document.getElementById('parent');
var child = document.getElementById('child');
var grandchild = document.getElementById('grandchild');

var ancestorWidth = ancestor.clientWidth;
var ancestorHeight = ancestor.clientHeight;
var parentWidth = parent.offsetWidth;
var parentHeight = parent.offsetHeight;
var childWidth = child.offsetWidth;
var childHeight = child.offsetHeight;
var grandchildWidth = grandchild.offsetWidth;
var grandchildHeight = grandchild.offsetHeight;

var scrollX = (parentWidth - ancestorWidth) / 2;
var scrollY = (parentHeight - ancestorHeight) / 2;

ancestor.scrollLeft = scrollX;
ancestor.scrollTop = scrollY;

grandchild.style.left = (ancestorWidth - grandchildWidth) / 2 + 'px';
grandchild.style.top = (ancestorHeight - grandchildHeight) / 2 + 'px';

首先,我们获取了祖先元素、父元素、子元素和孙子元素,并计算了它们的宽高。然后,我们计算了祖先元素需要滚动的距离,使得子元素能够在中心位置显示。接着,我们将祖先元素的滚动条滚动到相应位置,并将孙子元素的位置设置为祖先元素的中心位置。注意,我们使用了CSS伪元素::-webkit-scrollbar::-webkit-scrollbar-thumb来美化滚动条的样式。

JavaScript 实现祖先元素滚动条控制孙子元素居中显示

原文地址: https://www.cveoy.top/t/topic/otX6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录