Выделите элемент в вид внутри контейнера, но не в окне браузера
У меня есть контейнер с тегами, которые располагаются горизонтально. Смотрите пример ниже.
Контейнер имеет overflow:hidden
а также white-space:nowrap
таким образом, теги могут навсегда выйти вправо. Я хотел бы программно горизонтальную прокрутку до данного тега, если у меня есть его HTML-элемент в Javascript.
В моем тестовом компоненте я использовал el.scrollIntoView()
, который, казалось, работал отлично. Но затем я интегрировал компонент в большую HTML-страницу с вертикальной прокруткой и заметил каждый раз, когда звонил el.scrollIntoView
, он по-прежнему будет прокручиваться в горизонтальном виде внутри своего контейнера, но вся страница также будет перемещаться туда, где контейнер находился прямо в верхней части окна браузера. Это второе поведение, которое я, очевидно, не хочу.
Есть ли какой-нибудь способ прокрутки в представлении только внутри контейнера, и при этом окно браузера также не может перейти? Я хотел бы использовать ванильный JS, если это возможно.
function scrollToLast() {
var container = document.getElementById('container');
var tags = container.getElementsByTagName('span');
tags[tags.length-1].scrollIntoView()
}
body {
text-align: center;
}
#container {
border: 1px solid;
margin: 100px auto 20px;
overflow: hidden;
padding: 10px;
text-align: left;
white-space: nowrap;
width: 75%
}
#container > span {
border: 1px solid grey;
display: inline-block;
margin-right: 5px;
padding: 3px;
}
button {
margin-bottom: 100px;
}
.extra-content-on-page:before {
content: 'Simulates more content';
}
.extra-content-on-page {
background: #f2f2f2;
height: 100px;
}
<div class="extra-content-on-page"></div>
<div id="container">
<span>Tag 1</span>
<span>Tag 2</span>
<span>Tag 3</span>
<span>Tag 4</span>
<span>Tag 5</span>
<span>Tag 6</span>
<span>Tag 7</span>
<span>Tag 8</span>
<span>Tag 9</span>
<span>Tag 10</span>
<span>Tag 11</span>
<span>Tag 12</span>
<span>Tag 13</span>
<span>Tag 14</span>
<span>Tag 15</span>
<span>Tag 16</span>
<span>Tag 17</span>
<span>Tag 18</span>
<span>Tag 19</span>
<span>Tag 20</span>
<span>Tag 21</span>
<span>Tag 22</span>
<span>Tag 23</span>
<span>Tag 24</span>
<span>Tag 25</span>
<span>Tag 26</span>
<span>Tag 27</span>
<span>Tag 28</span>
<span>Tag 29</span>
<span>Tag 30</span>
<span>Tag 31</span>
</div>
<button onClick="scrollToLast()">Scroll to Tag 31</button>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
1 ответ
Рассмотреть возможность изменения container.scrollLeft
значение:
function scrollToLast() {
var container = document.getElementById('container');
var tags = container.getElementsByTagName('span');
container.scrollLeft = tags[tags.length-1].offsetLeft;
}
body {
text-align: center;
}
#container {
border: 1px solid;
margin: 100px auto 20px;
overflow: hidden;
padding: 10px;
text-align: left;
white-space: nowrap;
width: 75%;
scroll-behavior: smooth;
}
#container > span {
border: 1px solid grey;
display: inline-block;
margin-right: 5px;
padding: 3px;
}
button {
margin-bottom: 100px;
}
.extra-content-on-page:before {
content: 'Simulates more content';
}
.extra-content-on-page {
background: #f2f2f2;
height: 100px;
}
<div class="extra-content-on-page"></div>
<div id="container">
<span>Tag 1</span>
<span>Tag 2</span>
<span>Tag 3</span>
<span>Tag 4</span>
<span>Tag 5</span>
<span>Tag 6</span>
<span>Tag 7</span>
<span>Tag 8</span>
<span>Tag 9</span>
<span>Tag 10</span>
<span>Tag 11</span>
<span>Tag 12</span>
<span>Tag 13</span>
<span>Tag 14</span>
<span>Tag 15</span>
<span>Tag 16</span>
<span>Tag 17</span>
<span>Tag 18</span>
<span>Tag 19</span>
<span>Tag 20</span>
<span>Tag 21</span>
<span>Tag 22</span>
<span>Tag 23</span>
<span>Tag 24</span>
<span>Tag 25</span>
<span>Tag 26</span>
<span>Tag 27</span>
<span>Tag 28</span>
<span>Tag 29</span>
<span>Tag 30</span>
<span>Tag 31</span>
</div>
<button onClick="scrollToLast()">Scroll to Tag 31</button>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>
<div class="extra-content-on-page"></div>