1nks1
@1nks1
Утопаю в дырах своего дивана

LandingSeo. Почему урлы проявляются не на своих местах?

Добрый день! Решил что для моего одностраничного сайта будет полезна, в плане seo-продвижения данная фича. Согласно инструкции я установил данный плагин на свой сайт, но вот беда - урлы проявляются не на своих местах. Вернее первые три секции отрабатываются нормально, а дальше система дает сбой и все оставшиеся урлы умещаются в пару секций.
Оставлю ссылку на пациента
За что цепляется плагин на сайте - пример
<section class="container" id="ourPartners" data-seotitle="Наши партнеры" data-seourl="our-partners.html" data-seodescription="Описание страницы «Наши партнеры»">
    <div class="row">
      <div class="col-md-12">
        <h1>Наши партнеры</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum nesciunt temporibus maiores est itaque odio iusto quas ipsam commodi laudantium ab, enim magnam provident, blanditiis error amet labore, culpa. Aperiam vel iste dolorum quisquam tempora repellendus et commodi voluptatum non voluptate ea fugiat repellat tempore eum cumque necessitatibus natus obcaecati esse veritatis sit cupiditate autem enim sequi, dolor impedit. Architecto atque labore temporibus voluptas dolore quae nesciunt numquam sit, dolores quia earum officiis rem optio eum ipsa aspernatur quasi. Aliquam libero adipisci sunt pariatur, quia voluptates esse tenetur explicabo odit quasi, dolores perferendis? Et dolor qui exercitationem cumque animi. Sunt.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam iusto maiores eaque, tempore animi odio praesentium nisi cum aliquid a, facilis dignissimos repudiandae id asperiores suscipit. Mollitia recusandae perspiciatis, quod temporibus aut ipsa eos maiores in impedit corporis facilis, voluptatum tenetur, blanditiis? Soluta minus, unde itaque harum ea exercitationem et non nesciunt, accusamus minima, labore, quasi rem ut id quidem nisi adipisci. Dolores dignissimos magni, laboriosam eum perspiciatis quidem quam deserunt, dolor quis tempore, ex velit ut. Sunt, voluptatem voluptatum id nihil, ipsam nam consequatur placeat amet enim animi facilis atque sint reiciendis nobis, molestiae maiores tenetur fugiat blanditiis vel!</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam iusto maiores eaque, tempore animi odio praesentium nisi cum aliquid a, facilis dignissimos repudiandae id asperiores suscipit. Mollitia recusandae perspiciatis, quod temporibus aut ipsa eos maiores in impedit corporis facilis, voluptatum tenetur, blanditiis? Soluta minus, unde itaque harum ea exercitationem et non nesciunt, accusamus minima, labore, quasi rem ut id quidem nisi adipisci. Dolores dignissimos magni, laboriosam eum perspiciatis quidem quam deserunt, dolor quis tempore, ex velit ut. Sunt, voluptatem voluptatum id nihil, ipsam nam consequatur placeat amet enim animi facilis atque sint reiciendis nobis, molestiae maiores tenetur fugiat blanditiis vel!</p>
      </div>
    </div>
  </section>

Здесь JS плагина, вызов плагина произведен предпоследней строчкой - тут же
(function($) {
	$.landingSeo = function(options) {
		
		var landingSeo = (function() {
			
			/*** Переменные ***/
			
			// Выборки
			var $sel = {};

			// Состояния
			var states = {
				isDefault: false	
			};
			
			// Параметры
			var settings = {};
			
			// SEO-параметры по умолчанию
			var seoDefaults = {
				title: '',
				keywords: '',
				description: '',
				url: '/'
			};
			
			/*** //Переменные ***/
			
			
			
			/*** Вспомогательные функции ***/
			
			// Получение дефолтных SEO-параметров
			var setSeoDefaults = function() {
				seoDefaults.title = document.title;
				seoDefaults.keywords = $("meta[name=keywords]", getObject("head")).attr("content");
				seoDefaults.description = $("meta[name=description]", getObject("head")).attr("content");
			};

			// Получение положений блоков
			var getBlocksPosition = function() {
				var wh = getObject("window").height();
				getObject("[data-seotitle]").each(function() {
					var $block = $(this),
						blockOffset = $block.offset();
					$block
						.data("top", parseInt(blockOffset.top))
						.data("bottom", parseInt(blockOffset.top + $block.outerHeight()));
				});	
			};

			// Определение текущего активного блока
			var checkBlocks = function(sc, wh) {
				var find = false;

				getObject("[data-seotitle]").each(function() {
					var $block = $(this);
					if(sc >= ($block.data("top") - 80 - settings.offsetTop) && sc <= ($block.data("bottom") + 80 - settings.offsetTop)) {
						if(!$block.data("current")) {
							getObject("[data-seotitle]").data("current", false);
							$block.data("current", true);
							setBlock({
								title: $block.data("seotitle"),
								keywords: $block.data("seokeywords"),
								description: $block.data("seodescription"),
								url: $block.data("seourl")
							});
						}
						find = true;
						states.isDefault = false;
						return false;
					}
				});
				if(!find && !states.isDefault) {
					setBlock(seoDefaults);
					states.isDefault = true;
				}
			};
			
			// Применение SEO-параметров
			var setBlock = function(params) { console.log(params);
				if(params.title) {
					document.title = params.title;
				}
				if(params.description) {
					$("meta[name=description]").remove();
					$("head").append('<meta name="description" content="' + params.description + '">');
				}
				if(params.keywords) {
					$("meta[name=keywords]").remove();
					$("head").append('<meta name="keywords" content="' + params.keywords + '">');
				}
				if(params.url && window.history.pushState !== undefined) {
					window.history.pushState({}, params.title, params.url);
				}
				// Отправка хита в Яндекс.Метрику
				if(settings.yaCounter) {
					if(window["yaCounter" + settings.yaCounter] !== undefined) {
						window["yaCounter" + settings.yaCounter].hit(params.url, {
							title: params.title
						});
					}
				}
				
				// Отправка отчета в Google Analytics
				if(window.ga !== undefined) {
					ga("send", {
						hitType: "pageview",
						page: params.url,
						title: params.title
					});
				}
				
				// Отправка хита в Google Analytics
				if(settings.addGoogleAnalytics && window.ga !== undefined) {
					ga("send", "pageview", window.location.hash);
				}
				
				settings.onBlockChange();
			};
			
			// Получение DOM объекта
			function getObject(selector, parent) {
				if(!$sel[selector] || $sel[selector].length == 0) {
					if(!parent) {
						parent = false;
					}
					if(selector == "window") {
						$sel[selector] = $(window);
					} else {
						$sel[selector] = $(selector, $sel[parent]);
					}
				}
				
				return $sel[selector];
			}
			
			/*** // ***/

			return {
				
				getObject: getObject,
				
				getBlocksPosition: getBlocksPosition,
				
				checkBlocks: checkBlocks,
				
				// Инициализация плагина
				init: function(options) {
					
					settings = $.extend({
						offsetTop: 0, // Отступ сверху
						
						yaCounter: null, // Код счетчика Яндекс.Метрики
						addGoogleAnalytics: false, // Код GA
						
						onBlockChange: function() {} // После смены блока
					}, options);
					
					// Установка SEO параметров
					setSeoDefaults();
					
					// Получение позиций блоков
					getBlocksPosition();
					
					// Расположение текущего блока
					checkBlocks(parseInt(getObject("window").scrollTop()), parseInt(getObject("window").height()));
				},
				
				goToBlock: function(url) {
					getObject("[data-seotitle]").each(function() {
						var $block = $(this);
						
						if($block.data("seourl") && $block.data("seourl") == url) {
							getObject("window").scrollTop($block.data("top") - settings.offsetTop);
							return false;
						}
					});
				}
				
			}
			
		})();
		
		landingSeo.init(options);
		
		// Скроллирование к нужному блоку (если содержится в аресной строке)
		landingSeo.goToBlock(window.location.pathname);

		// Получение размеров в начале и при смене размера браузера
		landingSeo.getObject("window").on("resize", function() {
			landingSeo.getBlocksPosition();
		});

		// Проверка блоков при скроллирование и в начале
		landingSeo.getObject("window").on("scroll", function() {
			var sc = parseInt(landingSeo.getObject("window").scrollTop()),
				wh = parseInt(landingSeo.getObject("window").height());

			landingSeo.checkBlocks(sc, wh);
		});
		 

	};
	$.landingSeo();
})(jQuery);
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
Ваш скрипт, при запуске определяет положение блоков. И сохраняет их, но по каким-то причинам ваши блоки смещаются, возможно погрузка контента, пр. И из-за этого идет смещение между виртуальным и реальным положением. Я вижу вариант пересчета положения блоков, относительно прокрутки или следить за обновлением контента на стр и пересчитывать. Те если вызвать еще раз в консоли после полной загрузки $.landingSeo() - то все встает на свои места. Посмотрите кто грузит svg через ajax.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы