/*
* USED:
* $('class_блока').selectionMenuItemsScrollPage();
* *
* Параметры по умолчанию:
* offsetTop: 60 — расстояние до блока
* speedScroll: 500 — скорости прокрутки
* activeClass: 'active' — класс для активного пункта
* start: 0, — расстояние сверху до блока
* end: 0 — расстояние до конца блока
* element: 'li' — класс элемента для которого присваивать класс актив
*/
$.fn.selectionMenuItemsScrollPage = function(options) {
var elem = this;
options = $.extend({
offsetTop: 60,
speedScroll: 500,
activeClass: 'active',
start: 0,
end: 0,
element: 'li'
}, options);
return this.each(function() {
elem.find('a[href^="#"]').click(function() {
var el = $(this).attr('href');
$('body, html').animate({
scrollTop: $(el).offset().top - options.offsetTop
}, options.speedScroll);
return false;
});
function callSelectionItems() {
var scrollTop = $(document).scrollTop();
elem.find(options.element).each(function() {
var hash = $(this).find('a').attr("href");
var target = $(hash);
if (target.offset().top - options.start <= scrollTop && target.offset().top + target.outerHeight() - options.end > scrollTop) {
elem.find(options.element).removeClass(options.activeClass);
$(this).addClass(options.activeClass);
} else {
$(this).removeClass(options.activeClass);
}
});
}
callSelectionItems();
$(document).on("scroll", function() {
callSelectionItems();
});
});
}
/*
* USED:
* $('class_блока').selectionMenuItemsScrollPage();
* *
* Параметры по умолчанию:
* offsetTop: 60 — расстояние до блока
* speedScroll: 500 — скорости прокрутки
* activeClass: 'active' — класс для активного пункта
* start: 0, — расстояние сверху до блока
* end: 0 — расстояние до конца блока
* element: 'li' — класс элемента для которого присваивать класс актив
*/
$.fn.selectionMenuItemsScrollPage = function(options) {
var elem = this;
options = $.extend({
offsetTop: 60,
speedScroll: 500,
activeClass: 'active',
start: 0,
end: 0,
element: 'li'
}, options);
return this.each(function() {
elem.find('a[href^="#"]').click(function() {
var el = $(this).attr('href');
$('body, html').animate({
scrollTop: $(el).offset().top - options.offsetTop
}, options.speedScroll);
return false;
});
$(document).on("scroll", function(){
var scroll_top = $(document).scrollTop();
elem.find(options.element).each(function(){
var hash = $(this).find('a').attr("href");
var target = $(hash);
if (target.offset().top - options.start <= scroll_top && target.offset().top + target.outerHeight() - options.end > scroll_top) {
elem.find(options.element).removeClass(options.activeClass);
$(this).addClass(options.activeClass);
} else {
$(this).removeClass(options.activeClass);
}
});
});
});
}
/*
* USED:
* $('class_блока').selectionMenuItemsScrollPage();
* *
* Параметры по умолчанию:
* activeClass: 'active' — класс для активного пункта
* start: 0, — расстояние сверху до блока
* end: 0 — расстояние до конца блока
*/
$.fn.selectionMenuItemsScrollPage = function(options) {
var elem = this;
options = $.extend({
activeClass: 'active',
start: 0,
end: 0
}, options);
return this.each(function() {
$(document).on("scroll", function(){
var scroll_top = $(document).scrollTop();
elem.find('li').each(function(){
var hash = $(this).find('a').attr("href");
var target = $(hash);
if (target.offset().top - options.start <= scroll_top && target.offset().top + target.outerHeight() - options.end > scroll_top) {
elem.find('li').removeClass(options.activeClass);
$(this).addClass(options.activeClass);
} else {
$(this).removeClass(options.activeClass);
}
});
});
});
}
/*
* USED:
* $('class_блока').selectionMenuItemsScrollPage();
*/
$.fn.selectionMenuItemsScrollPage = function() {
var elem = this;
if (elem.length) {
$(document).on("scroll", on_Scroll_page_navigation);
function on_Scroll_page_navigation(){
var scroll_top = $(document).scrollTop();
elem.find('li').each(function(){
var hash = $(this).find('a').attr("href");
var target = $(hash);
if (target.offset().top - 100 <= scroll_top && target.offset().top + target.outerHeight() + 100 > scroll_top) {
elem.find('li').removeClass("active");
$(this).addClass("active");
} else {
$(this).removeClass("active");
}
});
}
}
}