Функция прокрутки работает для некоторых событий нажатия, но не для других

#javascript #html #jquery #css

#javascript #HTML #jquery #css

Вопрос:

У меня есть три варианта одной и той же функции прокрутки для трех разных событий щелчка, два верхних работают нормально, медленно прокручиваясь до идентификатора элемента, однако третий просто переходит прямо к элементу без прокрутки.

     $('#scroll-down').click(function scrollDownProfile(){
        $('html, body').animate({
            scrollTop: $('#profile').offset().top
        }, 500);
    });

    $('#scroll-down-bp').click(function scrollDownBP(){
        $('html, body').animate({
            scrollTop: $('#bp').offset().top
        }, 500);
    });

    $('#scroll-down-software').click(function scrollDownProjects(){
        $('html, body').animate({
            scrollTop: $('#software').offset().top
        }, 500);
    });
  

Учитывая тот факт, что все они одинаковы, я подумал, что это может иметь какое-то отношение к HTML, поскольку каждое событие щелчка находится на отдельной странице, однако я не вижу ничего плохого в приведенном ниже HTML. Как я уже сказал, каждый блок HTML-кода взят с другой страницы.

 <a id="scroll-down" href="#profile" class="scroll-down">
                <span></span>
            </a>
        </header>
        <nav id="navigation-bar" class="navbar navbar-default" role="navigation">
            <div class="navbar-header">
                <button class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"></button>
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </div>
            <div class="navbar-collapse navbar-ex1-collapse collapse" style="height: 1px">
                <ul class="nav navbar-nav">
                    <li id="nav_profile" class="active">
                        <a href="#profile">Profile</a>
                    </li>
                    <li id="nav_education" class>
                        <a href="#education">Education</a>
                    </li>
                    <li id = "nav_experience" class>
                        <a href="#experience">Experience</a>
                    </li>
                    <li id="nav_contact" class>
                        <a href="#contact">Contact</a>
                    </li>
                </ul>
            </div>
        </nav>

<div id="profile" class="background_white">
            <div class="container">
                <h2>Profile</h2>
            </div>
</div>
  
 <a id="scroll-down-bp" href="#bp" class="scroll-down">
                <span></span>
            </a>
        </header>
        <nav id="navigation-bar" class="navbar navbar-default" role="navigation">
            <div class="navbar-header">
                <button class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"></button>
            </div>
            <div class="navbar-collapse navbar-ex1-collapse collapse" style="height: 1px">
                <ul class="nav navbar-nav">
                    <li id="nav_bp" class="active">
                        <a href="#bp">BP-ICAM</a>
                    </li>
                    <li id="nav_masters" class>
                        <a href="#masters">Master's</a>
                    </li>
                    <li id = "nav_chromition" class>
                        <a href="#chromition">Chromition</a>
                    </li>
                    <li id="nav_references" class>
                        <a href="#Contact">References</a>
                    </li>
                </ul>
            </div>
        </nav>
<div id="bp" class="background_white">
            <div class="container container-about-me">
                <div id="bp-icam logo">
                    <h2>BP-ICAM</h2>
                </div>
            </div>
</div>
  
 <a id="scroll-down-software" href="#software" class="scroll-down">
                <span></span>
            </a>
        </header>
<div id="software" class="background_white">
            <div class="container container-about-me">
                <h2 style="color: #2A293E;">Projects</h2>
            </div>
</div>
  

Единственное различие между HTML из двух, которые работают, и тем, который не работает, — это элемент навигации между тем, где пользователь нажимает, и элементом, на который прокручивается. Я не понимаю, как это может вызвать несоответствие.

Ответ №1:

Сначала я бы запустил свой html через средство проверки html, просто чтобы быть уверенным. Тогда я бы написал прослушиватели щелчков следующим образом:

 $('#scroll-down').on('click', function {
    $('#profile')[0].scrollIntoView({behavior: "smooth", block: "start"});
});
  

Для справки: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView