JavaScript的scrollIntoView()中间alignment?
Javascript .scrollIntoView(boolean)
只提供两个alignment选项。
- 最佳
- 底部
如果我想滚动视图,那怎么办? 我想在页面中间的某个地方添加特定元素?
使用window.scrollTo()
为此。 获取要移动的元素的顶部,并减去窗口高度的一半。
演示: http : //jsfiddle.net/ThinkingStiff/MJ69d/
Element.prototype.documentOffsetTop = function () { return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop() : 0 ); }; var top = document.getElementById( 'middle' ).documentOffsetTop() - ( window.innerHeight / 2 ); window.scrollTo( 0, top );
使用getBoundingClientRect()
远远超过母链的效率,并且不涉及通过扩展原型来污染全局范围。 它在浏览器中得到广泛的支持。
const element = document.getElementById('middle'); const elementRect = element.getBoundingClientRect(); const absoluteElementTop = elementRect.top + window.pageYOffset; const middle = absoluteElementTop - (window.innerHeight / 2); window.scrollTo(0, middle);
演示: http : //jsfiddle.net/cxe73c22/
用JQuery我使用这个:
function scrollToMiddle(id) { var elem_position = $(id).offset().top; var window_height = $(window).height(); var y = elem_position - window_height/2; window.scrollTo(0,y); }
例:
<div id="elemento1">Contenido</div> <script> scrollToMiddle("#elemento1"); </script>
您可以分两步进行:
myElement.scrollIntoView(true); var viewportH = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); window.scrollBy(0, -viewportH/2); // Adjust scrolling with a negative value here
你可以添加元素的高度,如果你想以globaly为中心,而不是居中顶部:
myElement.scrollIntoView(true); var viewportH = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); window.scrollBy(0, (myElement.getBoundingClientRect().height-viewportH)/2);