У меня есть section
на моей веб-странице, которая содержит несколько материалов, поэтому я решил присвоить ей фиксированную высоту и полосу прокрутки с overflow-y: scroll
. Чтобы упростить навигацию, я добавил панель навигации поверх section
с anchor links
для каждого содержимого в разделе. Моя проблема заключается в том, что всякий раз, когда вы нажимаете на ссылку привязки, родительская страница прокручивается вместе с разделом, ведь навигационная панель исчезает, поэтому вам нужно прокрутить родительскую страницу вверх, чтобы снова найти панель навигации. Вот быстрый пример того, что я имею в виду: как вы видите, секция body
прокручивается и к цели, когда я хочу, чтобы прокручивалась только секция scrollview
. Как мне исправить это поведение?
Примечание: часть с плавной прокруткой на данный момент не очень важна, я включил ее только для того, чтобы показать свои окончательные намерения.
body{height: 100em}
#scrollviewsection
{
background-color: white;
}
#navbar {
overflow: hidden;
background-color: #333;
position: relative;
top: 0px;
}
/* tabbar links */
#navbar a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px;
text-decoration: none;
}
#scrollview
{
height: 40em;
width: auto;
overflow-y: scroll;
overflow-x: hidden;
scroll-behavior: smooth !important;
}
#part1 {height:10em;background-color: #cc6699}
#part2 {height:10em;background-color: #e68a00}
#part3 {height:10em;background-color: #00ffff}
#part4 {height:10em;background-color: #5cd65c}
<body>
<div style="height:10em"></div>
<section id="scrollviewsection">
<div id="navbar">
<a href="#part1">part1</a>
<a href="#part2">part2</a>
<a href="#part3">part3</a>
<a href="#part4">part4</a>
</div>
<div id="scrollview">
<div id="part1">part1</div>
<div style="height:10em"></div>
<div id="part2">part2</div>
<div style="height:10em"></div>
<div id="part3">part3</div>
<div style="height:10em"></div>
<div id="part4">part4</div>
</div>
</section>
</body>
РЕДАКТИРОВАТЬ: Я попытался использовать jquery плавную прокрутку, потому что я вспомнил, что я могу контролировать, какой элемент анимировать, теперь у меня есть целая куча новых ошибок: например, когда я нажимаю на часть 2 из части 1, она прокручивается мимо цели.
$('#navbar a').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('#scrollview').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
body {
height: 100em
}
#scrollviewsection {
background-color: white;
}
#navbar {
overflow: hidden;
background-color: #333;
position: relative;
top: 0px;
}
/* tabbar links */
#navbar a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px;
text-decoration: none;
}
#scrollview {
height: 40em;
width: auto;
overflow-y: scroll;
overflow-x: hidden;
}
#part1 {
height: 10em;
background-color: #cc6699
}
#part2 {
height: 10em;
background-color: #e68a00
}
#part3 {
height: 10em;
background-color: #00ffff
}
#part4 {
height: 10em;
background-color: #5cd65c
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<body>
<div style="height:10em"></div>
<section id="scrollviewsection">
<div id="navbar">
<a href="#part1">part1</a>
<a href="#part2">part2</a>
<a href="#part3">part3</a>
<a href="#part4">part4</a>
</div>
<div id="scrollview">
<div id="part1">part1</div>
<div style="height:10em"></div>
<div id="part2">part2</div>
<div style="height:10em"></div>
<div id="part3">part3</div>
<div style="height:10em"></div>
<div id="part4">part4</div>
</div>
</section>
</body>