2015-07-21 2 views
3

Обзор: Я использую метки привязки, чтобы прокрутить их соответствующие div, назначенные в href.jQuery плавный прокрутка до div с использованием анимации

HTML Markup:

<ul class="nav navbar-nav"> 
    <li><a href="#howToUse">How to use</a></li> 
    <li><a href="#benefits">Benefits</a></li> 
</ul> 

<div id="howToUse"> 
    Some content 
</div> 

<div id="benefits"> 
    Some content 
</div> 

JQuery:

$('ul.nav').find('a').click(function(){ 
    var $href = $(this).attr('href'); 
    var $anchor = $('#'+$href).offset(); 
    $('body').animate({ scrollTop: $anchor.top },'slow'); 
    return false; 
}); 

Проблема: Итак, теперь, когда я нажимаю на якорь тэга окна прокручивается частности ДИВ, но свиток не является гладким или медленным. Я бы предпочел сказать, что это вовсе не прокрутка. Он просто прыгает на этот div.

Я использовал анимацию, а также использовал параметр slow with it. Итак, в чем моя ошибка? Как я могу получить гладкий свиток, который я ищу здесь.

Сайт:

http://irankmedia.com/uskincare/

Привет там, пожалуйста, проверьте панель навигации на этом сайте, который не дает мне гладкую прокрутку эффекта я ожидал.

Надеюсь, что это принесет четкую идею.

+0

попробовать '$ ('ul.nav') найти ('A') нажмите.. (function (e) {e.preventDefault(); ' – atmd

+1

@Kiran Kumar Dash Синтаксическая ошибка, непризнанное выражение: ## howToUse будет там, что связано с $ ('#' + $ href) –

ответ

3

Проблема заключается в $('#'+ $href).offset();, так как сама href имеет #, он выдает сообщение об ошибке, как Uncaught Error: Syntax error, unrecognized expression: ##howToUse

$('ul.nav').find('a').click(function (e) { 
    e.preventDefault(); 
    var target = $(this).attr('href'); 
    var $anchor = $(target).offset(); 
    $('body').stop().animate({ 
     scrollTop: $anchor.top 
    }, 'slow'); 
}); 

Демо: Fiddle

+0

В моем случае это просто прыгает для div вместо прокрутки. моя проблема в том, что она не прокручивается плавно. Как это может быть причиной? –

+0

@KiranKumarDash, так как есть ошибка сценария, код анимации не выполняется ... поэтому происходит действие клика по умолчанию по умолчанию - проблема заключается в https://jsfiddle.net/arunpjohny/dctnbo8c/ –

+0

@KiranKumarDash и решение https://jsfiddle.net/arunpjohny/dctnbo8c/1/ –

2

Просто удалить '#' используется с $ HREF в противном случае ваш код работает штраф чувак

$('ul.nav').find('a').click(function(){ 
    var $href = $(this).attr('href'); 
    var $anchor = $($href).offset(); 
    $('body').animate({ 
      scrollTop: $anchor.top 
    },'slow'); 
    return false; 
}); 

он бросает ошибку синтаксиса, непризнанный выражение: ## howToUse

+0

спасибо. но все же свиток не является гладким. Он просто прыгает на div. Я ожидаю, что он будет прокручиваться плавно. –

+0

@ Kiran Kumar Dash вы можете изменить «медленный» на определенные мили, например 1000 или согласно вашей потребности, ссылаться на ** http: //api.jquery.com/animate/ ** для того, как применять скорость анимации –

+0

Это сайт где я пытаюсь: irankmedia.com/uskincare –

2

Попробуйте это:

$('ul.nav').find('a').click(function() { 
    var $href = $(this).attr('href'); 
    //var $anchor = $('#'+$href).offset(); 
    $('html, body').animate({ 
     scrollTop: $($href).offset().top 
    }, 2000); 
    return false; 
}); 

Demo here

+0

По-прежнему не удалось решить мою проблему. Он просто прыгает на div. Я ожидаю, что он будет прокручиваться плавно. –

+0

Вы пробовали демо? – Ash

+0

Я видел ваш код. Итак, я знаю, что код правильный. Но в моем случае это просто прыгает в div. –

Смежные вопросы