×

HOW TO SHOP

1 Login or create new account.
2 Review your order.
3 Payment & FREE shipment

If you still have problems, please let us know, by sending an email to support@website.com . Thank you!

SHOWROOM HOURS

Mon-Fri 9:00AM - 6:00AM
Sat - 9:00AM-5:00PM
Sundays by appointment only!
Вопросы? Email: info@nortsov.vn.ua
  • SUPPORT

NORTSOV IT BLOG

NORTSOV IT BLOG

Личный блог о разработке сайтов и моих интересах

+38 (068) 21 00 768
Email: info@nortsov.vn.ua

NORTSOV V.A.
21000, Винница, Украина

  • ГОЛОВНА
  • Портфоліо
  • Моє резюме
  • Про мене
  • Блог Айтішника
    • РОЗРОБКА ПЗ
      • AMP
      • CodeGear Delphi
      • CSS
      • JavaScript
      • Open Cart
      • WordPress
    • NETWORKING
      • CentOS
      • CISCO
      • DirectAdmin
      • NGiNX
      • DNS Servers
    • DESTINY 2
ЗАДАТЬВОПРОС
  • Home
  • Блог Айтішника
  • Розробка ПЗ
  • JavaScript
  • Плавная прокрутка к якорю с отступом сверху

Плавная прокрутка к якорю с отступом сверху

Плавная прокрутка к якорю с отступом сверху

by Владимир Норцов / Tuesday, 10 April 2018 / Published in JavaScript, Розробка ПЗ

Итак давайте разберемся с плавной прокруткой к якорю.

Частенько надо чтобы при клике на ссылку ссылку с якорем происходила прокрутка страницы к якорю, но на странице также есть фиксированное горизонтальное меню, и получается, что страница прокручивается слишком много. То есть то место где находиться якорь подлазит под фиксированный блок горизонтального меню или просто хеадера.

Также иногда нужно сделать так чтобы эта же прокрутка работала при переходе на ссылку с якорем на совершенно другой странице. И как правило стандартный скрипт который работает на одной странице уже не работает при таком переходе на другую страницу.

Как сделать, чтобы прокрутка останавливалась примерно в 100 пикселях от якоря?

Ниже представлен универсальный код для таких прокруток к якорю. Все что нужно вам будет заменить это параметр отступа (собственно высота фиксированного блока меню)

<script>
		jQuery(document).ready(function($){
			
			var isMobile = false; //initiate as false
			// device detection
			if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) ||
			/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true;
		
			var myHash = location.hash; //получаем значение хеша
			
			if(myHash[1] != undefined){ //проверяем, есть ли в хеше какое-то значение
				$('html, body').animate({scrollTop: $(myHash).offset().top}, 2000); //скроллим за полсекунды
			};
			
			$(function () {
				$('a[href*=#]:not([href=#])').click(function () {
					if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
						var target = $(this.hash);
						target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
						if (target.length) {


							if (isMobile) {
								$('html,body').animate({
									scrollTop: target.offset().top - 90
								}, 800);
							} else {
								$('html,body').animate({
									scrollTop: target.offset().top - 160
								}, 800);
								console.log('111');
							}


							return false;
						}
					}
				});
			});
		});	
	</script>

Немножко добавил еще кода по определению устройства и мы в итоге можем выставить разный отступ для десктопа и мобильного устройства.

6
  • Tweet

What you can read next

Подготовка сайта WordPress для Google Mobile-First Index
Wordpress Shema.org
Как добавить Rich Snippets для отзывов и рейтингов без плагина?
Сочетания клавиш WordPress, их более чем 63

Поиск

Рубрики

  • NETWORKING
    • CentOS
    • DirectAdmin
    • NGiNX
  • Без категорії
  • Розробка ПЗ
    • JavaScript
    • Open Cart
    • WordPress

Новые статьи

  • Установка ImageMagick (Image Manipulation) на RHEL / CentOS и Fedora

  • Temporal API

    Temporal API в JavaScript. Работа с датой

  • Конфигурация клиента Proxy

  • Как выровнять блоки по высоте, jQuery скрипт

    Выровнять блоки по высоте, jQuery скрипт

  • NGiNX

    Включаем компрессию SVG gzip в nginx

Популярные статьи

  • Установка ImageMagick (Image Manipulation) на RHEL / CentOS и Fedora

  • Temporal API

    Temporal API в JavaScript. Работа с датой

  • Конфигурация клиента Proxy

  • Как выровнять блоки по высоте, jQuery скрипт

    Выровнять блоки по высоте, jQuery скрипт

  • NGiNX

    Включаем компрессию SVG gzip в nginx

КОНТАКТНАЯ ФОРМА

Отправьте ваше сообщение и я свяжусь с вами в ближайшее время !

ИНФОРМАЦИЯ

  • Блог Айтішника
  • Послуги
  • Портфоліо
  • Про мене
  • Моє резюме
  • Відгуки
  • Фото галлерея

КОНТАКТЫ

Тел.: (068) 21 00 768
Email: info@nortsov.vn.ua

NORTSOV IT BLOG

  • GET SOCIAL
NORTSOV IT BLOG

© 2017 NORTSOV - IT BLOG. All Rights Reserved.

TOP