|
/** |
|
* @title Smooth scrolling to an element on another or current page jQuery. | Плавная прокрутка до элемента на другой или на текущей странице jQuery. |
|
* @version 1.0 |
|
* @author Artem Kuznecov |
|
* @email [email protected] |
|
* @website web.master-artem.ru |
|
* @link https://snippets.cacher.io/snippet/272470c3dfd7b504d6c9 |
|
* @param {String} obj.selectorLinks |
|
* @param {Number} obj.durationScroll | optionally (default: 500) |
|
* @param {Number} obj.delayForOtherPage | optionally (default: 0) |
|
* @param {String} obj.selectorTopFixedElement | optionally (default: 0, фиксированный элемент сверху, напрмер шапка) |
|
* @param {Number} obj.addMarginTopPx | optionally (default: 0) |
|
*/ |
|
function Autoscrolling(obj) { |
|
var self = this; |
|
this.$links = $(obj.selectorLinks); |
|
this.durationScroll = obj.durationScroll || 500; |
|
this.delayForOtherPage = obj.delayForOtherPage || 0; |
|
this.topFixedElementHeight = $(obj.selectorTopFixedElement).height() || 0; |
|
this.addMarginTopPx = obj.addMarginTopPx || 0; |
|
this.sumMarginTop = self.topFixedElementHeight + self.addMarginTopPx; |
|
|
|
/* Плавный скролл до элемента с id на текущей странице. */ |
|
self.$links.each(function (i, el) { |
|
$(el).click(function (event) { |
|
var $targetForScroll = $( $(event.target)[0].hash ); |
|
if ( typeof($targetForScroll[0]) !== 'undefined' ) { |
|
event.preventDefault(); |
|
self.scrollToTarget( $targetForScroll, self.sumMarginTop ); |
|
} |
|
}); |
|
}); |
|
|
|
/* Плавный скролл до элемента с id на другой странице. */ |
|
$(document).ready(function () { |
|
var $targetForScroll = $(window.location.hash); |
|
if ($targetForScroll) { |
|
self.scrollToTarget( $targetForScroll, self.sumMarginTop, true ); |
|
} |
|
}); |
|
|
|
this.scrollToTarget = function ($targetForScroll, sumMarginTop, otherPage = false) { |
|
if (!otherPage) { self.delayForOtherPage = 0; } |
|
if ($targetForScroll[0]) { |
|
var offsetSectionOfTop = $targetForScroll.offset().top - sumMarginTop; |
|
$('html, body').delay(self.delayForOtherPage).animate({ scrollTop: offsetSectionOfTop }, self.durationScroll); |
|
window.location.hash = '';//очищаем хеш в адресной строке чтобы предотвратить скролл браузера |
|
} |
|
} |
|
|
|
} |