var position = 0;
var current_index = 0;
var navlist = document.getElementsByClassName("menu__link")
window.onscroll = function() {
position = window.pageYOffset;
}
function Scroll(id, index) {
navlist[current_index].className = "menu__link"
current_index = index;
navlist[current_index].className = "menu__link active"
var el_pos = document.getElementById(id).offsetTop;
var interval;
if (position < el_pos) {
interval = setInterval(function() {
position += 13;
if (position + 50 >= el_pos) {
clearInterval(interval);
} else {
window.scrollTo(0, position);
}
}, 0);
} else {
interval = setInterval(function() {
position -= 13;
if (position + 50 <= el_pos) {
clearInterval(interval);
} else {
window.scrollTo(0, position);
}
}, 0);
}
}
<nav class="navigation">
<ul class="menu" id="menu">
<li class="menu__item">
<a class="menu__link active" onclick="Scroll('home', 0)">Home</a>
</li>
<li class="menu__item">
<a href="services" class="menu__link" onclick="Scroll('services', 1)">About Us</a></li>
<li class="menu__item">
<a class="menu__link" onclick="Scroll('project', 2)">Portfolio</a></li>
<li class="menu__item">
<a class="menu__link">Features</a></li>
<li class="menu__item">
<a class="menu__link">Blog</a></li>
<li class="menu__item">
<a class="menu__link">Pricing</a></li>
<li class="menu__item">
<a class="menu__link">Shortcodes</a></li>
<li class="menu__item">
<a class="menu__link">Contact</a></li>
</ul>
<img src="img/cart.svg" alt="" class="menu__cart">
<div class="search">
<input class="search__input" type="text" placeholder="Поиск">
<img src="img/search.svg" class="search__icon" alt="">
</div>
</nav>
Пока лишь реализовано, чтоб было подсвечено меню которое нажал
<header class="sticky-header">
<nav class="top-menu">
<ul>
<li><a class="active" href="#home">Главная</a></li>
<li><a href="#about">О нас</a></li>
<li><a href="#service">Услуги</a></li>
<li><a href="#contact">Контакты</a></li>
</ul>
</nav>
</header>
<section id="home">
Здесь любой контент...
</section>
<section id="about">
Здесь любой контент...
</section>
<section id="service">
Здесь любой контент...
</section>
<section id="contact">
Здесь любой контент...
</section>
jQuery
var menu_selector = ".top-menu"; // Переменная должна содержать название класса или идентификатора, обертки нашего меню.
function onScroll(){
var scroll_top = $(document).scrollTop();
$(menu_selector + " a").each(function(){
var hash = $(this).attr("href");
var target = $(hash);
if (target.position().top <= scroll_top && target.position().top + target.outerHeight() > scroll_top) {
$(menu_selector + " a.active").removeClass("active");
$(this).addClass("active");
} else {
$(this).removeClass("active");
}
});
}
$(document).ready(function () {
$(document).on("scroll", onScroll);
$("a[href^=#]").click(function(e){
e.preventDefault();
$(document).off("scroll");
$(menu_selector + " a.active").removeClass("active");
$(this).addClass("active");
var hash = $(this).attr("href");
var target = $(hash);
$("html, body").animate({
scrollTop: target.offset().top
}, 500, function(){
window.location.hash = hash;
$(document).on("scroll", onScroll);
});
});
});
И затем просто его проинициализируйте.
$(document).ready(function(){
$(".top-menu").changeActiveNav();
});
Рабочий пример: https://codepen.io/praim/pen/NMgdLb
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите пожалуйста! У меня одна проблема на сайтеЕсли я нахожусь например на /ru/about
как будет лучше построить вот этот блок? Заранее спасибо
Хочу написать расширение , которое будет считать время проведенное в интернет, НО счет начинается только по клику на значок расширения и заканчивает...
EDGE съедает границы рамки у таблиц В других браузерах всё хорошо, а вот EDGE Проблема еще в том, что доступа к CSS не имею, поэтому код выглядит...