2015-02-25 2 views
0

Мне нужно исправить свой код. Если я нажму на более чем одну html ссылку href в меню, мой скрипт будет прокручивать каждую ссылку по клику один за одним нажатием ссылки. Мне нужно прокрутить только до первой нажатой ссылки, а другие щелкнутые ссылки во время прокрутки будут проигнорированы.Остановить прокрутку по каждой нажатой ссылке один за другим, прокрутить только до первой нажатой ссылки

jQuery(window).bind("load", function() { 
var hash = window.location.hash; 

hash = hash.replace("#", ""); 

var elem = jQuery(".pb-line-css-group-" + hash); 

menu_scroll_to(elem); 
}); 

jQuery(document).ready(function() { 

jQuery(".menu-item A").click(function() { 
    var hash = jQuery(this).attr('href'); 

    hash = hash.replace("#", ""); 
    hash = hash.replace("/", ""); 

    var elem = jQuery(".pb-line-css-group-" + hash); 

    menu_scroll_to(elem); 
}); 
}); 

function menu_scroll_to(elem) { 

if (elem) { 
    jQuery('html, body').animate({ 
     scrollTop: elem.offset().top - 70 
    }, 2000, "easeOutQuint"); 
} 

} 
+0

Создать переменную вар = 0 чек, если переменная == 1 не прокручиваются так что увеличение в этом случае блок. – mertyildiran

ответ

1

Вы можете настроить функцию дребезга, так что вы только позвоните menu_scroll_to() один раз для нескольких щелчков мыши в течение заданного периода времени.

Вот ссылка на функцию debounce, которая должна работать.

Debounce function

добавить эту функцию в ваших JS и замените следующую строку:

menu_scroll_to(elem); 

с:

debounce(function() { 
    menu_scroll_to(elem); 
}, 250); 

где 250 это время в миллисекундах.

окончательный код все вместе будет что-то вроде этого:

jQuery(window).bind("load", function() { 
     var hash = window.location.hash; 

     hash = hash.replace("#", ""); 

     var elem = jQuery(".pb-line-css-group-" + hash); 

     menu_scroll_to(elem); 
}); 

jQuery(document).ready(function() { 

     jQuery(".menu-item A").click(function() { 
       var hash = jQuery(this).attr('href'); 

       hash = hash.replace("#", ""); 
       hash = hash.replace("/", ""); 

       var elem = jQuery(".pb-line-css-group-" + hash); 

       debounce(function() { 
        menu_scroll_to(elem); 
       }, 250); 
     }); 
}); 

function menu_scroll_to(elem) { 
    if (elem) { 
      jQuery('html, body').animate({ 
        scrollTop: elem.offset().top - 70 
      }, 2000, "easeOutQuint"); 
    } 
}; 

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 
     var callNow = immediate && !timeout; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
     if (callNow) func.apply(context, args); 
    }; 
}; 
+0

Если я не уверен, мне нужно добавить этот код Функция debounce (func, wait, instant) { \t \t \t var timeout; \t \t \t Функция возврата() { \t \t \t \t вар контекст = это, Args = аргументы; \t \t \t \t вар позже = функция() { \t \t \t \t \t тайм-аут = NULL; \t \t \t \t \t если (! Немедленное) func.apply (context, args); \t \t \t \t}; \t \t \t \t var callNow = немедленный &&! Timeout; \t \t \t \t clearTimeout (timeout); \t \t \t \t timeout = setTimeout (позже, подождите); \t \t \t \t if (callNow) func.apply (context, args); \t \t \t}; \t \t}; , а затем использовать это? debounce (function() { menu_scroll_to (elem); }, 250); –

+0

Я отредактировал свой ответ, чтобы включить весь код. –

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