Показать сообщение отдельно
  #5 (permalink)  
Старый 25.04.2022, 13:29
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

После долгих мучений сочинил вот такое:

<span class="smile-m">
   кнопка
</span>
<div class="smiles-modal">
    <div class="smile-overlay">
    <div class="height" style="height: 350px;overflow: auto;">
        <div class="tab-b" id="tab-0" style="display: block;">
        смайлы
        </div>
        <div class="tab-b" id="tab-1">
        смайлы
        </div>
        <div class="tab-b" id="tab-2">
        смайлы
        </div>
        <div class="tab-b" id="tab-3">
        смайлы
                </div>
        </div>
        <div class="tabs-header">
            <a href="#tab-0" class="tab-h actives" data-tab="0"></a>
            <a href="#tab-1" class="tab-h" data-tab="1"></a>
            <a href="#tab-2" class="tab-h" data-tab="2"></a>
            <a href="#tab-3" class="tab-h" data-tab="3"></a>
        </div>
    </div>
    <script>
    window.onload = function() {
        document.querySelector('.tabs-header').addEventListener('click', ftabs);

        function ftabs(event) {
            if (event.target.className == 'tab-h') {
                let dataTab = event.target.getAttribute('data-tab');
                let tabH = document.getElementsByClassName('tab-h');
                for (let i = 0; i < tabH.length; i++) {
                    tabH[i].classList.remove('actives');
                }
                event.target.classList.add('actives')
                let tabBody = document.getElementsByClassName('tab-b');
                // for (let i = 0; i < tabBody.length; i++) {
            }
        }
    }

    document.querySelectorAll('a[data-tab^="#"').forEach(link => {
    link.addEventListener('click', function(e) {
    e.preventDefault();

    let href = this.getAttribute('data-tab').substring(1);

    const scrollTarget = document.getElementById(data-tab);

    // const topOffset = document.querySelector('.scrollto').offsetHeight;
    const topOffset = 0; // если не нужен отступ сверху 
    // const elementPosition = scrollTarget.getBoundingClientRect().top;
    const offsetPosition = elementPosition - topOffset;

    window.scrollBy({
        top: offsetPosition,
        behavior: 'smooth'
    });
});
});
    </script>


Оно работает, но при переключении табов "дергается" вся страница, если я правильно понимаю элемент
<span class="smile-m">
   кнопка
</span>
выравнивается на странице по вертикали, и к табам:

<a href="#tab-0" class="tab-h actives" data-tab="0"></a>
            <a href="#tab-1" class="tab-h" data-tab="1"></a>
            <a href="#tab-2" class="tab-h" data-tab="2"></a>
            <a href="#tab-3" class="tab-h" data-tab="3"></a>


класс actives добавляется при клике, очень бы хотелось что бы он добавлялся при ручной прокрутке к соответствующему блоку. вот как оно сейчас: https://noviy-kovcheg.ru/smoking
Ответить с цитированием