@Kryptonit

Как реализовать это на чистом JS?

Цель: реализовать якорные ссылки на странице с помощью JS. Вот HTML:
<ul class = "list">
                    <li class="li active">главная</li>
                    <li class="li">навыки</li>
                    <li class="li">опыт</li>
                    <li class="li">портфолио</li>
                    <li class="li">контакты</li>
                </ul>


Вот уже написанный JS:
let li = document.querySelectorAll('.li');
    let ul = document.querySelector('.list');

// Определяю по какой ссылке был клик:

li.forEach(i => {
        i.addEventListener('click', function(){
            //Здесь нужно вызвать ф-ю для каждого элемента 
            
        });
    });
// Вот эта функция, переносящаяся на нужный блок

function ScrollTo(element){
        window.scroll({
            left: 0, 
            top: element.offsetTop,
            behavior: 'smooth'
        })
    }

Можно просто забить If ами, но мне не нравиться такой способ.
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Цель: реализовать якорные ссылки
Шаг №0 для достижения этой цели - собственно, использовать в разметке ссылки, а в качестве href указывать идентификатор элемента. И тогда никаких if не понадобится - можно будет легко получить id элемента, а по id уже его самого.

Бонусом люди со сломанным или выключенным js смогут пользоваться этим меню и можно будет скопировать прямую ссылку на определённый блок.

Но если уж вы нестерпимо хотите сломать стандартный сценарий использования ссылок на страницах, потому что вас "не устраивает их отображение в адрессной строке", можно добиться и этого через event.preventDefault().
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Banan44
Full Stack
let ul = document.querySelector('.list');

// Определяю по какой ссылке был клик:


ul.addEventListener('click', data => {
    ScrollTo(data.target) // Дочерний элемент на который вы нажали в блоке
})
// Вот эта функция, переносящаяся на нужный блок

function ScrollTo(element){
    window.scroll({
        left: 0, 
        top: element.offsetTop,
        behavior: 'smooth'
    })
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы