Глючит переход по якорям
Доброго времени суток!
Такая проблема: переделывал меню сайта, исправлял косяк с якорями, но вылез другой:( Сайт на modx, имеется дестопная и мобильная версии (вёрстка одинаковая), на десктопе при переходах по якорям главной страницs всё нормально, а на мобильной происходит такой глюк: нажимаешь на 1 ссылку на якорь - переходит нормально, подымаешься наверх, нажимаешь на другую ссылку на др. якорь - страница сначала листается до 1-го якоря, а потом уже до 2-го. И чем больше переходов - тем "веселее" такая карусель. Пробовал 2 варианта реализации: 1 вариант. Меню: <ul> <li class="level0"> <a title="Наша корпоративная жизнь и результаты работы" class="toAnchor" data-txt="about">О компании</a> </li> <li class="level0"> <a title="Проектирование, монтаж, сервис" class="toAnchor" data-txt="service">Услуги</a> </li> <li class="level0"> <a title="Оборудование, техническая информация" class="toAnchor" data-txt="catalog">Каталог продукции</a> </li> <li class="level0"> <a href="/monitoring#inform" title="Система мониторинга и управления" class="toAnchor">Показания</a> </li> <li class="level0"> <a title="Информация о нашем расположении, телефонах, филиалах и партнёрах" class="toAnchor" data-txt="contacts">Контакты</a> </li> <ul> Пример 1-го из якорей: <div> <a name="catalog" class="for_fix_menu"></a> </div> Сам скрипт:
$(document).ready(function(){
$('.toAnchor').click(function(e){
e.preventDefault();
if($('.fixed_top').is(':hidden')) {
$('.toAnchor').on("click", function () {
$('html, body').animate({ scrollTop: $('a[name="main"]').offset().top}, 400 );
$('html, body').animate({ scrollTop: $('a[name="'+$(this).data('txt')+'"]').offset().top}, 1000);
return false;
});
}
else {
$('html, body').animate({ scrollTop: $('a[name="'+$(this).data('txt')+'"]').offset().top}, 1000);
return false;
}
});
});
2 вариант. Меню:
<ul>
<li class="level0">
<a title="Наша корпоративная жизнь и результаты работы" class="toAnchor" onclick="scrollToContent('about')">О компании</a>
</li>
<li class="level0">
<a title="Проектирование, монтаж, сервис" class="toAnchor" onclick="scrollToContent('service')">Услуги</a>
</li>
<li class="level0">
<a title="Оборудование, техническая информация" class="toAnchor" onclick="scrollToContent('catalog')">Каталог продукции</a>
</li>
<li class="level0">
<a href="/monitoring#inform" title="Система мониторинга и управления" class="toAnchor">Показания</a>
</li>
<li class="level0">
<a title="Информация о нашем расположении, телефонах, филиалах и партнёрах" class="toAnchor" onclick="scrollToContent('contacts')">Контакты</a>
</li>
<ul>
Пример 1-го из якорей: <div> <a name="catalog" class="for_fix_menu"></a> </div> Сам скрипт:
function scrollToContent(anchor) {
if($('.fixed_top').is(':hidden')) {
$('.toAnchor').on("click", function () {
$('html, body').animate({ scrollTop: $('a[name="main"]').offset().top}, 500 );
$('html, body').animate({ scrollTop: $('a[name="'+anchor+'"]').offset().top}, 1000);
return false;
});
}
else {
$('html, body').animate({ scrollTop: $('a[name="'+anchor+'"]').offset().top}, 1000);
return false;
}
}
Оба варианта приводят к такому развитию событий...:help: Что не так? Я в js не особо, мне как-то ближе php и C#, но приходится углубляться |
Независимо от того, какую технологию вы используете для плавной прокрутки, доступность очень важна. Например, если вы щёлкнете ссылку с адресом #hash, браузер сфокусируется на элементе, соответствующему этому идентификатору. Страница может прокручиваться, но прокрутка является побочным эффектом изменения фокуса.
<a href="#hash">Go to hash</a> <!-- если нажать на такую ссылку, то произойдёт переход к элементу с таким же id --> <p id="hash">Here you are!</p>Именно такая техника называется переход по якорю. У вас же немного усложнено! Что касается анимации, то вам следует использовать свойство scroll-behaviour, что касается старых браузеров, то нужно учитывать, что здесь важен переход, а не анимация! Поэтому это кроссбраузерный вариант. Вот пример с вашими ссылками... (зачем изобретать велосипеды class="toAnchor" onclick="scrollToContent('catalog')" или data-txt="catalog", когда есть стандартное href="#catalog")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
html {
scroll-behavior: smooth;
}
nav {
text-align: center;
background: white;
position: fixed;
top: 0;
left: 0;
right: 0;
padding: 10px;
}
nav a {
display: inline-block;
border-bottom: 1px solid;
color: #199cff !important;
cursor: pointer;
margin: 0 13px;
padding: 1px 0;
text-decoration: none;
}
nav a:hover,
nav a:focus {
border-bottom: none;
color: #fe0600 !important;
}
section {
color: #080;
border: solid;
border-width: thin 0;
background: #cfc;
max-width: 50em;
padding: 1em 2em;
margin: 15em auto;
}
</style>
</head>
<body>
<nav>
<a href="#about" title="Наша корпоративная жизнь и результаты работы">О компании</a>
<a href="#service" title="Проектирование, монтаж, сервис">Услуги</a>
<a href="#catalog" title="Оборудование, техническая информация">Каталог продукции</a>
<a href="/monitoring#inform" title="Система мониторинга и управления">Показания</a>
<a href="#contacts" title="Информация о нашем расположении, телефонах, филиалах и партнёрах">Контакты</a>
</nav>
<!-- пример -->
<section id="about">
<h2>О компании</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quas, voluptas eius laudantium nihil. Fuga similique ducimus perferendis earum cumque cupiditate, voluptatem vitae hic suscipit eligendi odit, corporis ex quibusdam quam.</p>
</section>
<section id="service">
<h2>Услуги</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ratione omnis quaerat minima sint eligendi! Maiores similique dolore iusto unde, iste odit fugit officiis earum deserunt distinctio eos magni pariatur sed?</p>
</section>
<section id="catalog">
<h2>Каталог продукции</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ex odio quis, culpa, molestias error omnis id doloribus velit. Obcaecati nemo quaerat aperiam quia quidem doloribus numquam, reprehenderit eligendi, magnam tempora!</p>
</section>
<section id="contacts">
<h2>Контакты</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perspiciatis pariatur nostrum consequuntur maiores qui expedita laboriosam voluptatem culpa repellendus voluptates saepe cumque, vel tempore, obcaecati nisi possimus hic. Beatae, quam.</p>
</section>
</body>
</html>
P. S. <a href="/monitoring#inform" title="Система мониторинга и управления">Показания</a> не работает в данном примере, поскольку там нужна страница monitoring, на которой произойдёт переход к inform |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 11:21. |