Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прокрутка к якорям (https://javascript.ru/forum/misc/44187-prokrutka-k-yakoryam.html)

Melistraza 10.01.2014 13:34

Прокрутка к якорям
 
Вообщем есть задание сделать плавную прокрутку к якорям на странице.
В качестве примера как должно быть дали http://sloboda-studio.com/
Элементы использующиеся для работы
Код:

<a href="#razdel1">К разделу 1</a>
<a name="razdel1"></a>

Использовал множество вариантов кода, остановился на
Код:

$(document).ready(function(){
    $('a[href^="#"]').click(function(){
          var target = $(this).attr('href');
          $('html, body').animate({scrollTop: $(target).offset().top}, 300);
          return false;
    });
});

Но при этом всегда вылетает
Код:

Uncaught TypeError: Cannot read property 'top' of undefined
(anonymous function)
st.event.dispatch      jquery-1.9.0.min.js:2
y.handle                    jquery-1.9.0.min.js:2

подскажите что исправить, или как сделать по другому, библиотека ScrollTo тоже не хочет работать!

ruslan_mart 10.01.2014 14:13

Когда-то такую ф-цию писал:

function $S(a, b)
{
	var c = $('html, body'), d = $(a);
	if(!d.length) return;
	if(b) c.scrollTop(0);
	c.animate({scrollTop: d.offset().top + 'px'}, 500);
}

$S('#content'); //Прокручиваем к блоку #content
$S('#content', true); //Прокручиваем к блоку #content от начала страницы


В Вашем случае так:

$(document).on('click', 'a[href^="#"]', function() {
	$S(this.href);
	return false;
});

Melistraza 10.01.2014 14:46

Что-то у вас тут мутно и не понятно
Код:

$S('#content'); //Прокручиваем к блоку #content
10
$S('#content', true); //Прокручиваем к блоку #content от начала страницы

что куда прикручивать ?

да и проблема ошибки
Uncaught TypeError: Cannot read property 'top' of undefined
не решена

Melistraza 10.01.2014 15:42

Всё равно натыкаюсь на одну и туже ошибку :(
Код:

Uncaught TypeError: Cannot read property 'top' of undefined
Использую jQ 1.9.0.min

ruslan_mart 10.01.2014 15:44

Melistraza, вообще, Ваш код по идее должен работать, попробуйте поставить более ранюю версию jQuery.

Vlasenko Fedor 10.01.2014 15:49

Цитата:

Сообщение от Melistraza
Всё равно натыкаюсь на одну и туже ошибку

Точно, не тот код показал
jQuery(document).ready(function($){
   $(this).on('click', 'a[href^=#]', function () {
        $('html, body').animate({ scrollTop:  $('a[name="'+this.hash.slice(1)+'"]').offset().top }, 1000 ); 
        return false;
    });
});

http://fiddle.jshell.net/vlasenkofedor/2St2g/

Melistraza 10.01.2014 15:49

Попробовал 1.7.2 и 2.0.2 проблема осталась!

Melistraza 10.01.2014 15:51

Poznakomlus
Спасибо огромное работает как нужно!
Несколько недель не могу решить задачу откладывал )

ruslan_mart 10.01.2014 15:56

http://learn.javascript.ru/play/P1N1p


Часовой пояс GMT +3, время: 06:56.