Вам не нужна структура для чего-то такого простого, вы можете использовать getBoundingClientRect()
для элемента, к которому вы пытаетесь прокрутить.Допустим,
Метод Element.getBoundingClientRect () возвращает размер элемента и его положение относительно области просмотра.
Допустим, что: result = b.getBoundingClientRect();
Это даст вам блок элемента в DOM-связанных вещах, но вы действительно хотите только одну вещь: result.x
координата, представляющая координату x в пикселях с учетом VIEWPORT.
Теперь вы можете просто использовать window.scrollTo()
к координате x этого элемента -50px для прокрутки, где вы хотели.
HTML:
<code><button id="but" onClick="scrol()">SCROLL TO 50px before</button>
<div id="a"><span id="b">WHERE AM I?</span></div>
<div id="tall"> </div>
<pre>
CSS:
#but { position: fixed; }
#a { padding:16px; position: absolute; top:300px;}
#b { background:yellow;}
#tall { height:2000px }
JS:
function scrol(){
var b = document.querySelector('#b');
window.scrollTo(b.getBoundingClientRect().x-50, 200);
}
Вуаля, 2-слойное ванильное решение:)
Для быстрой демонстрации, пожалуйста, посмотрите на эту скрипку: http://jsfiddle.net/58gzv79h/1/
ПРИМЕЧАНИЕ: в скрипкерешение немного больше, чтобы показать вам, как в отличие от result
, X не изменяется с момента загрузки документа.