Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Лоадер при нажатии на кнопки?

Лоадер при нажатии на кнопки?


     18.05.2026    Общие вопросы, Общие вопросы по вёрстке, Стили (CSS), jQuery, Ламерские вопросы    168

вопрос
Добрый.
Такой вопрос.
Нужен лоадер который будет появляться при нажатии на кнопку.
Сделал подобный:

HTML

<button type="submit" class="loaderbutton" id="submit">Click Me!</button>


CSS

.loaderbutton {
  padding: 10px 30px;
  background: #3e52c1;
  border: none;
  color: #fff;
  border-radius: 5px;
  cursor: pointer;
  font-size: 1.2em;
  position: relative;
  display: block;
}

.loaderbutton::after {
  content: '';
  display: block;
  width: 1.1em;
  height: 1.1em;
  position: absolute;
  left: calc(50% - 0.75em);
  top: calc(50% - 0.75em);
  border: 0.2em solid transparent;
  border-right-color: white;
  border-radius: 50%;
  animation: loader-animation 0.7s linear infinite;
  opacity: 0;
}

@keyframes loader-animation {
  from {
    transform: rotate(0);
  }
  to {
    transform: rotate(360deg);
  }
}

.loaderbutton.loading {
  color: transparent;
}

.loaderbutton.loading::after {
  opacity: 1;
}



javascript

const animBtn = document.getElementById("submit");

animBtn.addEventListener('click', () => {
  animBtn.classList.add("loading");
  //The following is used for demo purposes only//
  setTimeout(() => animBtn.classList.remove("loading"), 5000);
});


Пример работы
Не работает на несколько кнопок.. а нужно чтобы работало

Работать то работает.
Но проблема заключается в том - что он работает для одной кнопки.
Бывает что на странице по 5 кнопок.

Как его правильно сделать - чтобы работала для всех нужных кнопок на странице, а не только для одной ?

Ответил: Ups


var buttons = document.querySelectorAll('.loaderbutton');

buttons.forEach(function(btn) {
    btn.addEventListener('click', function() {
        btn.classList.add('loading');
        btn.innerText = 'Loading... Please wait!';
        btn.disabled = true;

        setTimeout(function() {
            btn.innerText = 'Download'; // Возвращаем текст  
            btn.classList.remove('loading'); // Убираем класс загрузки  
            btn.disabled = false; // Разблокируем кнопку  
        }, 3000); // Задержка 3 секунды  
    });
});

3 комментария

web102
Юзер

web102 - 18 мая 2026 07:39 -

Вы используете клик по кнопке с id="submit", а id должен быть уникальным.
исплользуйте класс:
document.querySelectorAll('.loaderbutton').forEach(btn =>
  btn.addEventListener('click', function() {
    this.classList.add('loading');
    setTimeout(() => this.classList.remove('loading'), 5000);
  })
);

Ups
Юзер

Ups - 18 мая 2026 08:39 -


var btn = document.querySelector('.loaderbutton');

btn.addEventListener('click',function() {
	btn.classList.toggle('loading');
	btn.innerText = 'Loading... Please wait!';
	btn.disabled = true;
	
	setTimeout(function() {
		btn.innerText = 'Download';
		btn.classList.toggle('loading');
		btn.disabled = false;
	}, 3000);  // здесь указывается в мс время для разблокировки кнопки
});

А как будет правильно из такого скрипта ?

Ups
Юзер

Ups - 18 мая 2026 12:39 -

Ну.. в общем вышло так. Работает четко.

var buttons = document.querySelectorAll('.loaderbutton');

buttons.forEach(function(btn) {
    btn.addEventListener('click', function() {
        btn.classList.add('loading');
        btn.innerText = 'Loading... Please wait!';
        btn.disabled = true;

        setTimeout(function() {
            btn.innerText = 'Download'; // Возвращаем текст  
            btn.classList.remove('loading'); // Убираем класс загрузки  
            btn.disabled = false; // Разблокируем кнопку  
        }, 3000); // Задержка 3 секунды  
    });
});


Мне помог это сделать https://aigptbot.ru/js/
За пару секунд код сам написал. Да.. новые AI технологии поражают конечно.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх