Кнопка со слайдером подтверждения

Мне нужна кнопка подтверждения слайдера, которая будет выглядеть, как показано ниже.

Первоначально кнопка будет выглядеть так:

После того, как пользователь завершит слайд, он должен выглядеть так:

В настоящее время у меня есть код ниже. Как изменить, чтобы добиться этого

<button id = "slider">
  <input id = "confirm" type = "range" value = "0" min = "0" max = "100" />
  <span >File deleted.</span>
</button>
 

Элемент ввода внутри кнопки является недопустимым HTML. «Разрешенный контент: Фразовый контент, но не должно быть интерактивного контента»

Teemu 26.06.2024 10:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Введенный в кнопку недопустимый HTML.

Сделать это с нуля не так уж и просто. Я уверен, что есть виджеты получше, но я попробовал. Переменные CSS можно расширить, чтобы сделать код менее повторяющимся.

Версия, совместимая с Chrome/Firefox

document.addEventListener('DOMContentLoaded', () => {
  const sliderLabel = document.getElementById('sliderLabel');
  const confirmSlider = document.getElementById('confirm');
  const min = +confirmSlider.min;
  const max = +confirmSlider.max;
  const setPos = (field) => {
    var position = (+field.value - min) / (max - min) * 100
    field.style.background = `linear-gradient(to right, #4CAF50 0%, #4CAF50 ${position}%, #fff ${position}%, white 100%)`
  };

  confirmSlider.addEventListener('input', function() {
    setPos(this)
    if (this.value === this.max) {
      // delete the file and change the label
      sliderLabel.textContent = 'File deleted';
    }
  });
  setPos(confirmSlider);
});
:root {
  --thumb-icon: url('data:image/svg+xml,<svg xmlns = "http://www.w3.org/2000/svg" width = "20" height = "20" viewBox = "0 0 24 24"><text x = "50%" y = "50%" dominant-baseline = "middle" text-anchor = "middle" fill = "white" font-size = "14" font-family = "Arial, sans-serif">></text></svg>');
}

#sliderContainer {
  width: 200px; /* Adjusted to fit the slider */
  margin: 20px;
  position: relative;
  display: flex;
  justify-content: center; /* Centers content horizontally */
  align-items: center; /* Centers content vertically */
}

input[type = "range"]::-moz-range-thumb {
  width: 20px;
  height: 20px;
  background: #4CAF50 var(--thumb-icon) no-repeat center center;
  border-radius: 50%;
  cursor: pointer;
}

input[type = "range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 20px;
  height: 20px;
  background: #4CAF50 var(--thumb-icon) no-repeat center center;
  border-radius: 50%;
  cursor: pointer;
}
input[type = "range"] {
  background: linear-gradient(to right, #4CAF50 0%, #4CAF50 50%, #fff 50%, #fff 100%);
  border: solid 1px #4CAF50;
  border-radius: 10px;
  height: 19px;
  width: 356px;
  outline: none;
  transition: background 450ms ease-in;
  -webkit-appearance: none;
}

#sliderLabel {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  pointer-events: none;
  font-size: smaller;
  font-family: sans-serif;
}
<div id = "sliderContainer">
  <input id = "confirm" type = "range" value = "0" min = "0" max = "100" />
  <span id = "sliderLabel">Yes, proceed</span>
</div>

Спасибо @mplugjan. Это работало в Chrome, но заметил, что линейный градиент не работает в Firefox. Если бы вы могли предоставить информацию, поскольку это может работать и для Firefox, это было бы очень полезно.

user3732294 27.06.2024 06:35

Я переделал слайдер. В Firefox тоже все нормально

mplungjan 27.06.2024 08:58

Другие вопросы по теме