Мне нужна кнопка подтверждения слайдера, которая будет выглядеть, как показано ниже.
Первоначально кнопка будет выглядеть так:
После того, как пользователь завершит слайд, он должен выглядеть так:
В настоящее время у меня есть код ниже. Как изменить, чтобы добиться этого
<button id = "slider">
<input id = "confirm" type = "range" value = "0" min = "0" max = "100" />
<span >File deleted.</span>
</button>
Введенный в кнопку недопустимый 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, это было бы очень полезно.
Я переделал слайдер. В Firefox тоже все нормально
Элемент ввода внутри кнопки является недопустимым HTML. «Разрешенный контент: Фразовый контент, но не должно быть интерактивного контента»