Utilizar um Switch no lugar de um Checkbox

Boa tarde.

Consigo utiliza um switch para substituir um checkbox na tela?

Exemplo:

image

Att,

Nielson Santos

Olá @nielson.santos.

É possível sim!

Inspirado neste exemplo do W3 School, criei um CSS e um JS para transformar a Checkbox do Formulário em campo do tipo Switch.

Nesta implementação, todas as Checkboxes com nome precedido por “swi” serão transformadas em Switches. Você pode adicionar os códigos no CSS / JS Público ou no CSS / JS do Formulário.

O resultado é este:

image
image

CSS

Adicione o este código no CSS Público do Sistema ou no CSS do Formulário:

.switch-parent >label:first-child {
   display: inline-block;
   margin-right: 6px;
}

.switch {
  position: relative;
  display: inline-block;
  width: 30px !important;
  height: 16px;
}

.switch input { 
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .2s;
  transition: .2s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 12px;
  width: 12px;
  left: 2px;
  bottom: 2px;
  background-color: white;
  -webkit-transition: .2s;
  transition: .2s;
}

input:checked + .slider {
  background-color: #ee9090;
}

input:focus + .slider {
  box-shadow: 0 0 1px #ee9090;
}

input:checked + .slider:before {
  -webkit-transform: translateX(14px);
  -ms-transform: translateX(14px);
  transform: translateX(14px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 22px;
}

.slider.round:before {
  border-radius: 50%;
}

JavaScript

Adicione o este código no JavaScript Público do Sistema ou no JavaScript do Formulário:

// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback( function(arguments){

   let fieldNames = Object.keys(arguments.form.fields);
      
   for (let n = 0; n < fieldNames.length; n++) {
      let field = arguments.form.fields[fieldNames[n]];
      
      // Todos campos do tipo "6" (checkbox) com nome 
      // precedido de "swi" serão transformados em Switch
      if (field.type == 6 && field.name.indexOf('swi') === 0) {
         // Obtem elemento checkbox
         checkbox = document.getElementById(field.clientId);
         // Elemento superior
         let checkboxParent = checkbox.parentNode;
         // Remove Checkbox
         checkbox.remove();
         
         // Cria elementos do Switch, e adiciona a checkbox dentro
         let switchLabel = document.createElement('label');
         switchLabel.className = 'switch';
         switchLabel.appendChild(checkbox);
         let slider = document.createElement('span');
         slider.className = 'slider round'
         switchLabel.appendChild(slider);
         
         // Adiciona o Swith no documento
         checkboxParent.className = 'switch-parent';
         checkboxParent.appendChild(switchLabel);
      }         
   }
});

3 curtidas

@daniel.giacomelli, ficou perfeito, muito obrigado.

1 curtida

Bah, ficou muito top!
Mas fica a dica para deixar a opção direto no client, vale a pena.
Talvez, seja até uma opção do checkbox, como forma de exibição.

2 curtidas

É uma boa ideia! Vamos cogitar isso!

1 curtida