<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<div class="container">
<button class="btn">up</button>
<ul class="menu">
<li><a class="active" href="#first">First</a></li>
<li><a href="#second">Second</a></li>
<li><a href="#third">Third</a></li>
<li><a href="#fourth">Fourth</a></li>
</ul>
<section class="first" id="first">
<h2>First</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci at atque fuga hic iure magni odio quidem
sit. Ad aliquid autem blanditiis consectetur cupiditate dolorum eaque est necessitatibus nesciunt, nostrum
quaerat quam quidem quisquam quo recusandae repellat soluta! Ad adipisci aliquid blanditiis consequatur ea
excepturi explicabo, fugiat, iste laboriosam nobis repellat sapiente sint ut! Adipisci consequatur iste
laborum placeat rem. A ab atque deserunt esse exercitationem itaque laudantium officiis placeat
reprehenderit voluptas. Ad asperiores commodi consectetur cum debitis enim excepturi exercitationem iure
labore laboriosam minima nemo nobis obcaecati, quibusdam quidem ut vel vitae voluptas voluptatem voluptates.
Ab alias aperiam atque consequuntur earum eveniet facilis fugiat nulla officia porro provident quae qui quis
ratione rerum, tenetur vitae. Ad cum illum, impedit in labore laborum magnam maiores necessitatibus possimus
ullam. Accusantium animi aperiam aspernatur consequuntur corporis cumque, delectus deserunt dignissimos
dolore dolores eaque earum enim error explicabo illo labore magni molestias natus nemo nihil nisi non...
jQuery(document).ready(function($) {
let menuScroll = function () {
$('.btn').on('click', function () {
$('body,html').animate({scrollTop: 0}, 800);
});
$(".menu").on("click","a", function (event) {
event.preventDefault();
let id = $(this).attr('href'),
top = $(id).offset().top - 80 + 'px';
$('body,html').animate({scrollTop: top}, 300);
});
};
let fixedMenu = function(){
let menu = $('.menu');
let menuHeight = menu.innerHeight();
$(window).on('scroll', function () {
if($(window).scrollTop() > menuHeight){
menu.addClass('fixed');
} else {
menu.removeClass('fixed');
}
});
};
let liveMenu = function(){
$(window).on('scroll', function () {
//выборка секций
let $sections = $('section');
//обработчик для каждой секции
$sections.each(function(i,el){
//расстоянии от начала документа до секции
let top = $(el).offset().top-100;
//расстоянии от начала документа до нижней границы секции
let bottom = top +$(el).height();
//расстояние при скроллинге
let scroll = $(window).scrollTop();
//получаем id секции
let id = $(el).attr('id');
//проверка расстояния при скроллинге
if( scroll > top && scroll < bottom){
$('.menu a').removeClass('active');
$('.menu a[href="#'+id+'"]').addClass('active');
}
});
});
};
menuScroll();
fixedMenu();
liveMenu();
});
Please Whitelist JSFiddle in your content blocker.
Help keep JSFiddle free for always by one of two ways:
Whitelist JSFiddle in your content blocker (two clicks)
Go PRO and get access to additional PRO features →
Join the 4+ million users, and keep the JSFiddle dream alive.
Ad-free
All ads in the editor and listing pages are turned completely off.
Use pre-released features
You get to try and use features (like the Palette Color Generator) months before everyone else.
Fiddle collections
Sort and categorize your Fiddles into multiple collections.
Private collections and fiddles
You can make as many Private Fiddles, and Private Collections as you wish!
Console
Debug your Fiddle with a minimal built-in JavaScript console.