Как перейти к hrefs h2 для определенных страниц на JavaScript?

Это работает (пример - идентификатор h2-Tag.):

<script type = "text/javascript">
jQuery(document).ready(function($){
    var menubarHeight = 54;
    $('a[href^=#]').on('click', function(e){
        var href = $(this).attr('href');
        $('html, body').animate({
            scrollTop:$(href).offset().top -menubarHeight }, 1);
    });
});

<script type = "text/javascript">
jQuery(document).ready(function($){
    var menubarHeight = 154;
    $('a[href^=#idofh2]').on('click', function(e){
        var href = $(this).attr('href');
        $('html, body').animate({
            scrollTop:$(href).offset().top -menubarHeight }, 1);
    });
});

Это не работает (мне нужна эта функция для всех hrefs h2 только для этих страниц -> https://example.com/, https://example.com/2.):

<script type = "text/javascript">
jQuery(document).ready(function($){
    var menubarHeight = 154;
    $('a[href^=#]').on('click', function(e){
        // Here you can see, that there is h2. I don't know where to place it.
        var href = $(this).attr('h2');
        $('html, body').animate({
            scrollTop:$(href).offset().top -menubarHeight }, 1);
    });
});

Я использую 1, потому что хочу прыгать без плавной прокрутки. Что я могу использовать вместо .animate?

Если я использую это:

<script type = "text/javascript">
jQuery(document).ready(function($){
    var menubarHeight = 54;
    $('a[href^=#]').on('click', function(e){
        var href = $(this).attr('href');
        $('html, body').css("scrollTop", $(href).offset().top -menubarHeight);
    });
});

тогда 54 дозы не работают.

Этот:

$('a[href^=#]')

обычно 54.

И это:

$('a[href^=#idofh2]')

- это идентификатор одного тега h2 страницы. Это работает. Но как его использовать для всех тегов h2 и только для страниц https://example.com/, https://example.com/2? Если я перейду к тегу h2, он должен быть 154 (menubarHeight), иначе 54.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Во-первых, если вам просто нужно изменить scrollTop, вы можете использовать метод css вместо анимации:

.css({
        scrollTop:$(href).offset().top -menubarHeight
});

или

.css("scrollTop", $(href).offset().top -menubarHeight);

Я плохо понимаю твой вопрос! Вы хотите прокручивать заголовки (теги h2) по ссылке?

Если вы хотите просто перейти к домену с идентификатором, вы можете назвать его ссылкой

<a href = "#idOfTheDom">Jump</a>

Это не приводит к перезагрузке стороны.

Если я неправильно понял вопрос, предоставьте дополнительную информацию.

<a href = "#1">Jump</a>
<div style = "height:500px"></div>
<h2 id = "1">This is the H2</h2>
<div style = "height:500px"></div>

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

Terry 27.10.2018 11:02
Ответ принят как подходящий

Основываясь на вашем вопросе, я предполагаю, что вы хотите установить menuHeight на 154 или 54, в зависимости от того, указывает ли цель href на элемент <h2> или нет. Здесь пригодится метод jQuery .is().

Итак, вы можете просто использовать метод .is('h2'), чтобы проверить, совпадает ли тэг выбранного узла с h2:

jQuery(document).ready(function($){
    $('a[href^=#]').on('click', function(e){
        var href = $(this).attr('href');

        // Store the target element reference
        var $target = $(href);

        // Check if target element is a <h2> element
        var isTargetH2 = $target.is('h2');

        // Use ternary operators to set menuHeight
        // - If target element is <h2>, use 154
        // - Otherwise, use 54
        var menubarHeight = isTargetH2 ? 154 : 54;

        $('html, body').css("scrollTop", $target.offset().top - menubarHeight);
    });
});

Спасибо. Это работает, но я понял, что идентификатор находится внутри тега span h2. Как я могу его выбрать? В CSS есть код: @media (min-width: ?px){}. Как я могу использовать его в JavaScript, а также только для URL-адресов example.com, example.com/2, чтобы быть более конкретным?

user8652270 27.10.2018 16:05

@ user8652270 Если диапазон с ID является прямым потомком h2, вы можете просто проверить $target.parent().is('h2'). Чтобы это работало с определенными URL-адресами, вам необходимо проверить window.location.href.

Terry 27.10.2018 16:19

Это работает, но только если страница загружена. Тогда я могу щелкнуть. Проблема в том, что веб-сайт (например: example.com/#idofh2) не использует мой JavaScript, если я открываю его непосредственно в Chrome (веб-поиск Google или адресная строка). Я использую WordPress. Из-за этого он показывает мне переход WordPress к id. Я также вижу скачок, если страница загружена. После скачка WordPress происходит скачок моего js-кода, и при открытии прямо из адресной строки он показывает мне только скачок WordPress, так что заголовки закрываются строкой меню.

user8652270 27.10.2018 16:53

@ user8652270 Затем вам нужно использовать JS для определения хеша URL-адреса при загрузке вашей страницы, чтобы он правильно настраивал положение прокрутки. Это отличается от привязки обработчика часов к вашему элементу привязки. Но внутренняя логика осталась прежней.

Terry 27.10.2018 21:46

Другие вопросы по теме