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

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


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

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

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 - Сегодня, 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 - Сегодня, 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 - Сегодня, 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 технологии поражают конечно.

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

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

наверх