Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   ScrollIntoView. Неужто не придумали решения победить странное поведение (https://javascript.ru/forum/dom-window/83203-scrollintoview-neuzhto-ne-pridumali-resheniya-pobedit-strannoe-povedenie.html)

voraa 13.10.2021 18:53

ScrollIntoView. Неужто не придумали решения победить странное поведение
 
Вот модельный код
<!DOCTYPE html>
<html>
<head>
<style type='text/css'>
 #main {
   position:relative;
   width: 300px;
   height: 300px;
   border: 1px solid black;
   overflow-y: auto;
 }

#ucont {
    position:relative
}

#open {
    position:relative;
	height: 120px;
	margin:10px 20px;
	border: 1px solid red;
	overflow-y: auto;
}

#bscr {
    position: sticky;
    top: 0;
    float: right;
    z-index: 10;
}

#elem {
    color: red;
}
</style>
<script>
</script>
</head>
<body> 
<div id="main">
  <div id="ucont">
    <ul>
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
            <div id='open'>
             <button id= bscr>Scroll</button>
           text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text <span id='elem'> elem elem </span>text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
            text text text text <br>
           </div>
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item
        <li> item item item

    </ul>
  </div>
</div>

<script>
const bt = document.getElementById('bscr')
const main = document.getElementById('main')
const el = document.getElementById('elem')

bt.addEventListener('click', () => {
    const st = main.scrollTop;
    el.scrollIntoView({block: "center" , behavior: "smooth"})
    //main.scrollTop = st  // работает без  behavior: "smooth"
    
})
</script>

</body>
</html>


Можно ли что то сделать, что бы #elem прокручивался до центра только своего родительского блока, его родительский блок не прокручивался внутри своего родителя?
Без behavior: "smooth" помогает тупое шаманство с scrollTop.
А как с плавной прокруткой быть?
Моно, конечно и по setTimeout возвращать блок на место, но зрительно эти прыжки туда сюда еще отвратнее.
Или только остается самому рассчитывать на сколько прокрутить и плавно прокручивать?


Часовой пояс GMT +3, время: 08:39.