2015-03-11 2 views
1

Итак, у меня есть сценарий для прокрутки до привязки при нажатии. Кажется, что он не работает над первым нажатием кнопки. он будет прыгать, а не прокручивать. но после первого щелчка, он переходит к привязке, и появляется мое меню, а затем все ссылки (в том числе и первый, который подпрыгнул) работают нормально. Я не уверен, что бы это вызвало, и было интересно, есть ли у кого-нибудь идея?JQuery прокручивается до якоря, действующего нечетным

У меня есть JSFiddle, но он отлично работает. только когда я реализую один и тот же код на своем сайте, когда это произойдет.

Благодаря

http://spo.comxa.com/

загрузил файлы выше для тестирования, то же самое происходит.

http://jsfiddle.net/reeceheslop/b59fn43e/

$(document).ready(function() { 
$('a[href^="#"]').on('click', function (e) { 
    e.preventDefault(); 

    var target = this.hash, 
     $target = $(target); 
    $('html, body').stop().animate({ 
     'scrollTop': $target.offset().top 
    }, 900, 'swing', function() { 
     window.location.hash = target; 

    }); 
}); 
+2

Непросто отладить проблему, не видя ее примера. Вы проверили консоль на наличие ошибок? У вас есть элементы с дублирующимися идентификаторами на странице, которые вызывают неожиданное поведение для '$ target.offset(). Top'? –

+0

добавил (а) ссылку на исходное сообщение, которое размещает файлы –

+0

У вас есть плагин, добавленный на этой странице? 'что-нибудь? Однако он не добавлен в 'jsFiddle'. – melancia

ответ

2

Ваша функция нажмите, кажется, быть вложенными внутри слушателя событий прокрутки, поэтому я предполагаю, что его не называют, пока что-то не прокручивается. Попробуйте переместить его снаружи вместе с функцией готовности документа следующим образом:

document.addEventListener('scroll', function (e) { 
    var newPos = (window.scrollY * -1)/5 
    document.getElementById("header").style.backgroundPosition = "center " + newPos + "px"; 

var startY = 300; 

$(window).scroll(function(){ 
    checkY(); 
}); 

function checkY(){ 
    if($(window).scrollTop() > startY){ 
     $('.fixednav').slideDown(); 
    }else{ 
     $('.fixednav').slideUp(); 
    } 
} 


checkY(); 

}); 

$(document).ready(function(){ 
$('a[href^="#"]').on('click',function (e) { 
    e.preventDefault(); 

    var target = this.hash, 
    $target = $(target); 
    $('html, body').stop().animate({ 
     'scrollTop': $target.offset().top 
    }, 900, 'swing', function() { 
     window.location.hash = target; 

    }); 
}); 
}); 
+0

Спасибо за ответ. я попробовал ваше предложение раньше, и он прекратил прокручивать все вместе, поэтому я переместил его обратно, я подумал, что странно, что он будет работать, когда внутри прослушивателя событий прокрутки. я буду продолжать заниматься этим, возможно, это связано с проблемой. –

+1

@ReeceHeslop вам нужно включить * js.js * файл ** после **, включая * jquery * library (*, поскольку ваш скрипт использует jquery *) –

+0

Это очень актуально, и я об этом не думал. Но даже после включения его после JQuery у меня все еще такая же проблема. Эта проблема сейчас просто раздражает меня, потому что я просто не могу понять это! Спасибо за ваш комментарий. оцените это –

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