softsprint menu Заказать

Скрипт плавного скролла WordPress

Июль 9, 2016 в 6:05 | wiki

Всем привет!

Недавно столкнулся с типичной задачей на сайте WordPress — нужно было сделать плавный скролл к целевому элементу на странице при нажатии на ссылку в меню сайта. Собственно, это — стандартный функционал любого современного лендинга. В нашем случае задача состояла в использовании чистого JavaScript без подключения внешних фреймворков, например, jQuery.
В сети есть не мало плагинов для WordPress для плавного скроллинга, например, https://ru.wordpress.org/plugins/tags/smooth-scroll
Но мы все знаем, что добавление любого плагина в наш сайт снижает его безопасность на взлом. В большинстве случаев сайты на WordPress взламываются именно через плагины — делаем выводы!
Итак, написан следующий код для медленного (плавного) скроллинга по странице:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
document.addEventListener("click", function (event) {
	var target = event.target;
	if (event.target.getAttribute("href")) {
		var targetHref = event.target.getAttribute("href")
	} else return false;
	if (targetHref.indexOf("#") >= 0) {
		var pos = targetHref.indexOf("#") + 1;
		var elemHref = document.getElementById(targetHref.slice(pos));
		moveScroll(elemHref);
		event.preventDefault()
	};
});
function moveScroll(elem) {
	var travel = 40;
	var time = 10;
	if (Math.abs(elem.getBoundingClientRect().top) < 1) return false;
	if (elem.getBoundingClientRect().top < 0) {
		if (Math.abs(elem.getBoundingClientRect().top) < travel) {
			window.scrollBy(0,-1);
			setTimeout(moveScroll,time/5,elem);
			} else {
			window.scrollBy(0,-travel);
			setTimeout(moveScroll,time,elem);
		}
	};
	if (elem.getBoundingClientRect().top > 0) {
		if (Math.abs(elem.getBoundingClientRect().top) < travel) {
			window.scrollBy(0,1);
			setTimeout(moveScroll,time/5,elem);
			} else {
			window.scrollBy(0,travel);
			setTimeout(moveScroll,time,elem);
		}
	}	
};

Функция скроллинга запускается рекурсивно через промежутки времени, равные time = 10 мс.
travel = 40 — это ход вертикального скроллинга при каждом рекурсивном вызове функции.
Представленный скрипт работает для ссылок вида:

1
<a href="http://softsprint.net/en/#about">About us</a>

т.е. скрипт проверяет, есть ли в ссылке обращение к ID элемента, к которому, собственно, и прокрутиться наша страница.

На сегодня всё — спасибо за прочтение заметки!

Давайте обсудим

softsprint heart

Наши контакты

Львов, Украина
mob: +380 97 551 44 55
skype: softsprint.net

Скажите Привет!