Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подправить рабочий JS код прокрутки до якоря с отступом сверху

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Есть рабочий код прокрутки до якоря, но если к ссылке якоря дописать страницу index.html, то код уже не работает
Айратиус
Отправлено: 02 Апреля, 2015 - 08:53:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Всем доброго дня. Есть рабочий код, который проводит прокрутку до якоря

http://jsfiddle[dot]net/mekwall/up4nu/

В нем ссылки


CODE (html):
скопировать код в буфер обмена
  1. <ul id="top-menu">
  2.   <li class="active">
  3.     <a href="#">Top</a>
  4.   </li>
  5.   <li>
  6.     <a href="#foo">Foo</a>
  7.   </li>
  8.   <li>
  9.     <a href="#bar">Bar</a>
  10.   </li>
  11.   <li>
  12.     <a href="#baz">Baz</a>
  13.   </li>
  14. </ul>

И все работает. Но не работает если ссылка имеет такой вид
CODE (html):
скопировать код в буфер обмена
  1. <ul id="top-menu">
  2.   <li class="active">
  3.     <a href="index.html">Top</a>
  4.   </li>
  5.   <li>
  6.     <a href="index.html#foo">Foo</a>
  7.   </li>
  8.   <li>
  9.     <a href="index.html#bar">Bar</a>
  10.   </li>
  11.   <li>
  12.     <a href="index.html#baz">Baz</a>
  13.   </li>
  14. </ul>




Помогите пожалуйста изменить JS чтобы при указании ссылки подобия index.html#foo (index.php#foo, any.php#foo) , скрипт тоже работал. Заранее благодарен за отзывчивость.

Ну и соответственно сам JS

CODE (javascript):
скопировать код в буфер обмена
  1. jQuery(function ($) {
  2.        
  3.        
  4.        
  5.         // Cache selectors
  6. var lastId,
  7.     topMenu = $("#top-menu"),
  8.     topMenuHeight = topMenu.outerHeight()+33,
  9.     // All list items
  10.     menuItems = topMenu.find("a"),
  11.     // Anchors corresponding to menu items
  12.     scrollItems = menuItems.map(function(){
  13.       var item = $($(this).attr("href"));
  14.       if (item.length) { return item; }
  15.     });
  16.  
  17. // Bind click handler to menu items
  18. // so we can get a fancy scroll animation
  19. menuItems.click(function(e){
  20.   var href = $(this).attr("href"),
  21.       offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
  22.   $('html, body').stop().animate({
  23.       scrollTop: offsetTop
  24.   }, 300);
  25.   e.preventDefault();
  26. });
  27.  
  28. // Bind to scroll
  29. $(window).scroll(function(){
  30.    // Get container scroll position
  31.    var fromTop = $(this).scrollTop()+topMenuHeight;
  32.    
  33.    // Get id of current scroll item
  34.    var cur = scrollItems.map(function(){
  35.      if ($(this).offset().top < fromTop)
  36.        return this;
  37.    });
  38.    // Get the id of the current element
  39.    cur = cur[cur.length-1];
  40.    var id = cur && cur.length ? cur[0].id : "";
  41.    
  42.    if (lastId !== id) {
  43.        lastId = id;
  44.        // Set/remove active class
  45.        menuItems
  46.          .parent().removeClass("active")
  47.          .end().filter("[href=#"+id+"]").parent().addClass("active");
  48.    }                  
  49. });
 
 Top
Faraon-san
Отправлено: 02 Апреля, 2015 - 09:48:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. offsetTop = href === "#" ? 0 : $(href.split('#').pop()).offset().top-topMenuHeight+1;
 
 Top
Айратиус
Отправлено: 02 Апреля, 2015 - 09:57:10
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Faraon-san пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. offsetTop = href === "#" ? 0 : $(href.split('#').pop()).offset().top-topMenuHeight+1;



Стиль active присваивается, НО! пропала плавность перехода и отступ сверху не приминается в 33px
 
 Top
Faraon-san
Отправлено: 02 Апреля, 2015 - 09:59:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. offsetTop = href === "#" ? 0 : $('#'+href.split('#').pop()).offset().top-topMenuHeight+1;
 
 Top
Айратиус
Отправлено: 02 Апреля, 2015 - 10:02:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Faraon-san пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. offsetTop = href === "#" ? 0 : $('#'+href.split('#').pop()).offset().top-topMenuHeight+1;

Извини мой косяк. Теперь все работает, а стиль active не применяется (В первом случае тоже не применялся. Не там посмотрел)

(Отредактировано автором: 02 Апреля, 2015 - 10:07:35)

 
 Top
Faraon-san
Отправлено: 02 Апреля, 2015 - 10:04:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




а ты $(window).scroll() используешь что бы class присвоить?
 
 Top
Айратиус
Отправлено: 02 Апреля, 2015 - 10:06:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Faraon-san пишет:
а ты $(window).scroll() используешь что бы class присвоить?


Ничего не скажу. Нашел этот метод в сети. В JS не рулю, только пхп
 
 Top
Faraon-san
Отправлено: 02 Апреля, 2015 - 10:13:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. jQuery(function ($) {
  2.    
  3.   // Bind click handler to menu items
  4.   // so we can get a fancy scroll animation
  5.   $('#top-menu').find('a').on('click', (function(){
  6.     var topMenuHeight = $('#top-menu').outerHeight()+33,
  7.         href = $(this).attr('href'),
  8.         obj = $('#'+href.split('#').pop()),
  9.         offsetTop = href === '#' ? 0 : obj.offset().top-topMenuHeight+1;
  10.     $('#top-menu').find('li.active').removeClass('active');
  11.     obj.closest('li').addClass('active');
  12.     $('html, body').stop().animate({
  13.         scrollTop: offsetTop
  14.     }, 300);
  15.     return false;
  16.   });
  17.  
  18. });
 
 Top
Айратиус
Отправлено: 02 Апреля, 2015 - 10:26:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Faraon-san пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. jQuery(function ($) {
  2.    
  3.   // Bind click handler to menu items
  4.   // so we can get a fancy scroll animation
  5.   $('#top-menu').find('a').on('click', (function(){
  6.     var topMenuHeight = $('#top-menu').outerHeight()+33,
  7.         href = $(this).attr('href'),
  8.         obj = $('#'+href.split('#').pop()),
  9.         offsetTop = href === '#' ? 0 : obj.offset().top-topMenuHeight+1;
  10.     $('#top-menu').find('li.active').removeClass('active');
  11.     obj.closest('li').addClass('active');
  12.     $('html, body').stop().animate({
  13.         scrollTop: offsetTop
  14.     }, 300);
  15.     return false;
  16.   });
  17.  
  18. });

В 16 строке ошибку показывает какую-то (Uncaught ReferenceError: version is not defineddepartament:813 (anonymous function))
 
 Top
Faraon-san
Отправлено: 02 Апреля, 2015 - 10:31:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. jQuery(function ($) {
  2.    
  3.   // Bind click handler to menu items
  4.   // so we can get a fancy scroll animation
  5.   $('#top-menu').find('a').on('click', function(){
  6.     var topMenuHeight = $('#top-menu').outerHeight()+33,
  7.         href = $(this).attr('href'),
  8.         obj = $('#'+href.split('#').pop()),
  9.         offsetTop = href === '#' ? 0 : obj.offset().top-topMenuHeight+1;
  10.     $('#top-menu').find('li.active').removeClass('active');
  11.     obj.closest('li').addClass('active');
  12.     $('html, body').stop().animate({
  13.         scrollTop: offsetTop
  14.     }, 300);
  15.     return false;
  16.   });
  17.  
  18. });

(Отредактировано автором: 02 Апреля, 2015 - 10:31:40)

 
 Top
Айратиус
Отправлено: 02 Апреля, 2015 - 10:56:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Вроде заработало, спасибо огромное!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB