Плавный scroll по тегам на странице
Есть сайт на WordPress. В статьях публикуются теги <h3>. Можно ли при помощи javascript спарсить из текста внутри статьи все <h3> , вывести их в отдельный блок <div class="nav"> и настроить навигацию с плавающим скролом (от пукта в навигации к соответствующему тегу <h3>)?
.nav{
width: 30%;
position: fixed;
display: inline-block;
}
.nav a{
display: block;
}
.text_post{
margin-left: 32%;
width: 67%;
display: inline-block;
}
<div class="nav">
<a href="#">Первый заголовок</a>
<a href="#">Второй заголовок</a>
<a href="#">Третий заголовок</a>
<a href="#">Четвертый заголовок</a>
</div>
<div class="text_post">
<h1>Название статьи</h1>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Первый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Второй заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Третий заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Четвертый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
</div>
Ответы (2 шт):
Автор решения: noname2019
→ Ссылка
Попробуйте так
jQuery(document).ready(function(){
$("h3").each(function(i){
var ctx = $(this);
$("<a />", {href:"javascript:;", text: $(this).text()}).appendTo(".nav").click(function(){
jQuery("html, body").stop().animate({scrollTop:ctx.offset().top-15}, '300', 'swing', function() {});
});
});
});
.nav{
width: 30%;
position: fixed;
display: inline-block;
}
.nav a{
display: block;
}
.text_post{
margin-left: 32%;
width: 67%;
display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="nav"></div>
<div class="text_post">
<h1>Название статьи</h1>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Первый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Второй заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Третий заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Четвертый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
</div>
Автор решения: Алекс Данилин
→ Ссылка
let tags = document.querySelectorAll('h3')
let nav = document.querySelector('.nav')
for(let tag of tags) {
let a = document.createElement('a')
a.href = '#'
a.innerHTML = tag.innerHTML
nav.append(a)
a.addEventListener('click', e => {
e.preventDefault()
tag.scrollIntoView({behavior: 'smooth'})
})
}
body {
height: 2000px;
}
.nav{
width: 30%;
position: fixed;
display: inline-block;
}
.nav a{
display: block;
}
.text_post{
margin-left: 32%;
width: 67%;
display: inline-block;
}
<div class="nav">
</div>
<div class="text_post">
<h1>Название статьи</h1>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Первый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Второй заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Третий заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
<h3>Четвертый заголовок</h3>
Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст... Текст... текст...
</div>
примерно так без jquery )