@stanko/dual-range-input é uma biblioteca de entrada nativa de intervalo duplo que usa dois inputs nativos de intervalo em HTML.
- Usa inputs nativos para preservar todas as interações padrão e os recursos de acessibilidade.
- É composta por cerca de 50 linhas de JavaScript e CSS.
- Por que isso é necessário
- Ela usa uma interface para ajustar parâmetros em uma ferramenta de desenho generativo, e precisava de sliders mínimo e máximo.
- As soluções existentes dependem de JavaScript e reimplementam recursos de arrastar e acessibilidade.
- Ao usar inputs nativos de intervalo em HTML, clicar na trilha deve mover o slider mais próximo para aquele valor.
- Como funciona
- Dois inputs são colocados lado a lado e, quando eles mudam, o ponto médio entre os dois valores é calculado.
- As propriedades mínima e máxima são definidas com base no ponto médio, e a largura dos inputs é atualizada.
- Redimensionamento dos inputs
- Ao calcular a largura dos inputs, é preciso considerar que a trilha é mais curta que a largura real do input.
- O cálculo é simplificado adicionando a largura do polegar à largura do input.
- Padding é adicionado ao wrapper do input para acomodar essa largura extra do polegar.
- Mover o polegar ao clicar
- Os inputs são redimensionados para se encontrarem no ponto médio, e ao clicar o polegar mais próximo se move para aquele valor.
- Ao ativar o modo de depuração, fica fácil ver o ponto médio.
- Estilização
- É possível estilizar os inputs de intervalo usando CSS.
- A estilização da trilha e do polegar é simples, e o raio de borda é removido na parte central de conexão da trilha.
- Tema
- Várias variáveis são expostas para facilitar a troca de tema.
- Valores padrão são fornecidos, e é possível criar temas sobrescrevendo as variáveis.
- Gradiente
- Um gradiente CSS é usado para pintar o intervalo selecionado.
- A variável
--dri-gradient-position é usada para definir o gradiente e é atualizada no código junto com a largura.
- Conclusão
- Este post serve para organizar as ideias e espera inspirar o uso de elementos nativos.
1 comentários
Comentários do Hacker News
<input type=range>, e no Firefox há um bug em que o valor muda um passo por vez ao clicar na alça