Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2012, 15:01
Новичок на форуме
Отправить личное сообщение для Daria_111 Посмотреть профиль Найти все сообщения от Daria_111
 
Регистрация: 19.12.2012
Сообщений: 7

Обновить кусок кода с версии 1.4.2 до новой
Ребята, очень прошу помощи. Есть кусок кода, который скролит по сайту якорной структуры и автоматически обновляет выбранный пункт меню (версия jQuery 1.4.2):
// add & remove active link
		$(document).ready(function() {
			$(window).scroll(function () {
				var inview = '#' + $("section > article:in-viewport:first").parent().attr('id'),
						$link = $('nav a').filter('[hash=' + inview + ']');

				if ($link.length && !$link.is('.selected')) {
					$('nav a').removeClass('selected');
					$link.addClass('selected');
				}
			})
		});

		// add smorth scroll
		$(document).ready(function() {
			function filterPath(string) {
			return string
				.replace(/^\//,'')
				.replace(/(index|default).[a-zA-Z]{3,4}$/,'')
				.replace(/\/$/,'');
			}
			var locationPath = filterPath(location.pathname);
			var scrollElem = scrollableElement('html', 'body');

			$('a[href*=#]:not(.accordion-toggle,#modal_button)').each(function() {
				var thisPath = filterPath(this.pathname) || locationPath;
				if (  locationPath == thisPath
				&& (location.hostname == this.hostname || !this.hostname)
				&& this.hash.replace(/#/,'') ) {
					var $target = $(this.hash), target = this.hash;
					if (target) {
						var targetOffset = $target.offset().top;
						$(this).click(function(event) {
							event.preventDefault();
							$(scrollElem).animate({scrollTop: targetOffset}, 500, function() {
								location.hash = target;
							});
						});
					}
				}
			});

			// use the first element that is "scrollable"
			function scrollableElement(els) {
				for (var i = 0, argLength = arguments.length; i <argLength; i++) {
					var el = arguments[i],
							$scrollElement = $(el);
					if ($scrollElement.scrollTop()> 0) {
						return el;
					} else {
						$scrollElement.scrollTop(1);
						var isScrollable = $scrollElement.scrollTop()> 0;
						$scrollElement.scrollTop(0);
						if (isScrollable) {
							return el;
						}
					}
				}
				return [];
			}

		});


Нужно обновить хотя бы до версии 1.7.0, так как работаю с Bootstrap и функциeй on().
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2012, 16:53
Аспирант
Отправить личное сообщение для Sanda Посмотреть профиль Найти все сообщения от Sanda
 
Регистрация: 12.10.2012
Сообщений: 90

А что не работает-то?
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2012, 17:20
Новичок на форуме
Отправить личное сообщение для Daria_111 Посмотреть профиль Найти все сообщения от Daria_111
 
Регистрация: 19.12.2012
Сообщений: 7

Просто не реагирует. Как был отмечен первый элемент в меню как .selected, так и остается. То есть плавный скролл работает, но не переключает.

Если подключаю jquery-1.4.2 - все круто переключает, корректно работает. Но возникает ошибка - не знает функцию on() - она появилась только в версии 1.7, а я ее использую в бутстраповском аккордеоне.
Если подключаю версию 1.7 - никаких ошибок firebag не выдает, но и с меню ничего не происходит при скроле...

Последний раз редактировалось Daria_111, 19.12.2012 в 17:26.
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2012, 17:43
Аспирант
Отправить личное сообщение для Sanda Посмотреть профиль Найти все сообщения от Sanda
 
Регистрация: 12.10.2012
Сообщений: 90

Селектор :in-viewport (строка 04) не входит в стандартные селекторы jQuery. И вряд ли когда-то входил. Гугль кидает сюда.
Гарантий не даю, но похоже, что проблема в этом.
Ответить с цитированием
  #5 (permalink)  
Старый 19.12.2012, 17:51
Новичок на форуме
Отправить личное сообщение для Daria_111 Посмотреть профиль Найти все сообщения от Daria_111
 
Регистрация: 19.12.2012
Сообщений: 7

да, я дополнительно подключаю после jQuery еще плагин http://grotesk.net/examples/smorth/jquery.viewport.js
Не могу понять, почему в старой версии все работает, а в новой не хочет. А еще есть в коде какие-то функции, каких нет в новой версии, или точно проблема в этом плагине?
Ответить с цитированием
  #6 (permalink)  
Старый 19.12.2012, 18:09
Новичок на форуме
Отправить личное сообщение для Daria_111 Посмотреть профиль Найти все сообщения от Daria_111
 
Регистрация: 19.12.2012
Сообщений: 7

ура, получилось!
Просто нужно было заменить:
$link = $('nav a').filter('[hash=' + inview + ']');

на
$link =$('nav a[href$="' + inview + '"]');


Спасибо, Sanda, что откликнулся!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обновить PHP в XAMPP до версии 5.4.0 и выше? jsuse Серверные языки и технологии 1 02.03.2012 21:05
Зацените кусок кода prowoke Общие вопросы Javascript 2 13.07.2011 10:58
Вывести исходный кусок кода. Jurasmi jQuery 2 10.12.2009 11:28