Обновить кусок кода с версии 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(). |
А что не работает-то?
|
Просто не реагирует. Как был отмечен первый элемент в меню как .selected, так и остается. То есть плавный скролл работает, но не переключает.
Если подключаю jquery-1.4.2 - все круто переключает, корректно работает. Но возникает ошибка - не знает функцию on() - она появилась только в версии 1.7, а я ее использую в бутстраповском аккордеоне. Если подключаю версию 1.7 - никаких ошибок firebag не выдает, но и с меню ничего не происходит при скроле... |
Селектор :in-viewport (строка 04) не входит в стандартные селекторы jQuery. И вряд ли когда-то входил. Гугль кидает сюда.
Гарантий не даю, но похоже, что проблема в этом. |
да, я дополнительно подключаю после jQuery еще плагин http://grotesk.net/examples/smorth/jquery.viewport.js
Не могу понять, почему в старой версии все работает, а в новой не хочет. А еще есть в коде какие-то функции, каких нет в новой версии, или точно проблема в этом плагине? |
ура, получилось!
Просто нужно было заменить: $link = $('nav a').filter('[hash=' + inview + ']'); на $link =$('nav a[href$="' + inview + '"]'); Спасибо, Sanda, что откликнулся! :thanks: |
Часовой пояс GMT +3, время: 13:33. |