определение нескольких прослушивателей jQuery on click scroll на основе массива javascript

#jquery #scroll #click

#jquery #прокрутка #нажмите

Вопрос:

Я определил «essayList» как массив, содержащий несколько элементов, которые я намерен использовать для содействия созданию нескольких событий прокрутки по щелчку для разделов моего сайта с использованием цикла for.

Например, при оценке «vi» цикл for должен создавать прослушиватель событий щелчка, который будет прокручивать страницу до элемента, имеющего «# vi» в качестве идентификатора, при нажатии на элемент, имеющий «#essay-link-vi» в качестве идентификатора.

Однако приведенный ниже код заставляет все действия с кликом прокручиваться до элемента с идентификатором «I» (последний элемент массива).

 var index = 0;
var essayList = ['ix', 'viii', 'vii', 'vi', 'v', 'iv', 'iii', 'ii', 'i'];

    for (index = 0; index < essayList.length;   index) {

        currentAnchor = "#essay-link-"   essayList[index];
        currentTarget = "#"   essayList[index];

        console.log(currentAnchor);
        console.log(currentTarget);

        jQuery(currentAnchor).click(function () {
            jQuery([document.documentElement, document.body]).animate({
                scrollTop: jQuery(currentTarget).offset().top
            }, 2000);
        });
    }
  

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

Комментарии:

1. Я думаю, что это не имеет значения

2. проводил исследования здесь, это проблема закрытия, пытаясь найти правильный код

Ответ №1:

Не уверен, что это то, чего вы пытаетесь достичь:

Создать страницу:

 $('html').css('height', '4000px')
  

Создание якорей:

 var index = 0;
var essayList = ['ix', 'viii', 'vii', 'vi', 'v', 'iv', 'iii', 'ii', 'i'];
  

Динамически создавайте элементы для щелчка:

 for (index = 0; index < essayList.length;   index) {
    sec_ind = index   1
    $('html').append("<a href='#"   essayList[index]   "' class='butt'>GO TO SECTION"   sec_ind   "</a><br>")
}
  

Динамически создавайте раздел для прокрутки до:

 for (index = 0; index < essayList.length;   index) {
    sec_ind = index   1
    $('html').append("<div class='sec' id="   essayList[index]   ">SECTION "   sec_ind   "</div>")
    $('.sec').css('height', '600px').css('background', 'grey').css('margin-bottom', '10px')
}
  

Добавьте CSS для плавной прокрутки:

 html {
  scroll-behavior: smooth;
}
  

Результат:

введите описание изображения здесь

Вот Скрипка.

Комментарии:

1. спасибо за все время, потраченное на подготовку примера, к сожалению, smooth scroll все еще является новым и не совместим со всеми браузерами, поэтому это не жизнеспособное решение

2. Правильно, но вы можете добавить любой подход прокрутки к вашим динамически создаваемым элементам.