Это работает (пример - идентификатор 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.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Во-первых, если вам просто нужно изменить 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>Основываясь на вашем вопросе, я предполагаю, что вы хотите установить 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 Если диапазон с ID является прямым потомком h2, вы можете просто проверить $target.parent().is('h2'). Чтобы это работало с определенными URL-адресами, вам необходимо проверить window.location.href.
Это работает, но только если страница загружена. Тогда я могу щелкнуть. Проблема в том, что веб-сайт (например: example.com/#idofh2) не использует мой JavaScript, если я открываю его непосредственно в Chrome (веб-поиск Google или адресная строка). Я использую WordPress. Из-за этого он показывает мне переход WordPress к id. Я также вижу скачок, если страница загружена. После скачка WordPress происходит скачок моего js-кода, и при открытии прямо из адресной строки он показывает мне только скачок WordPress, так что заголовки закрываются строкой меню.
@ user8652270 Затем вам нужно использовать JS для определения хеша URL-адреса при загрузке вашей страницы, чтобы он правильно настраивал положение прокрутки. Это отличается от привязки обработчика часов к вашему элементу привязки. Но внутренняя логика осталась прежней.
Я думаю, что причина, по которой OP не использует встроенные функции браузера, заключается в том, что у него, вероятно, есть исправленная строка меню в верхней части страницы, которая скрывает контент. Вот почему его код содержит логику определения высоты указанной строки меню.