home
html
components

slider checkbox

29 Dec 2024
slider checkbox
a slider checkbox
<slider-one> <template shadowrootmode=open> <style> .slider {position:relative;display:inline-flex;align-items:center;cursor:pointer; border:1px solid gray;border-radius:3px;height:30px;box-sizing:border-box;padding:0 5px} .slider input {opacity:0;width:0;height:0} .slider .label {margin-left:30px} .slider .hldr {position:absolute;top:4px;left:5px;width:30px;height:20px;background-color:#ccc} .slider .hldr:before {position:absolute;content:"";height:17px;width:17px;left:2px;bottom:2px;background-color:white;transition:.2s} .slider input:checked + .hldr {background-color:#2196F3} .slider input:checked + .hldr:before {transform:translateX(9px)} .slider .hldr {border-radius:34px} .slider .hldr:before {border-radius:50%} </style> <label id=autosave class=slider> <span class=track></span> <input type=checkbox> <span class=hldr></span> <span class=label>autosave</span> </label> </template> </slider-one> <script> var node = document.querySelector('slider-one'); var chk = node.shadowRoot.querySelector('[type=checkbox]'); chk.onchange = e=>console.log(chk.checked); </script>
slider checkbox demo
checkbox slider 2
second example, user supplied characteristics, available multiple times on a single page
<slider-two> <template id=slider-two-template> <style> .slider {position:relative;display:inline-flex;align-items:center;cursor:pointer; border:1px solid gray;border-radius:3px;height:30px;box-sizing:border-box;padding:0 5px} .slider input {opacity:0;width:0;height:0} .slider .label {margin-left:30px} .slider .hldr {position:absolute;top:4px;left:5px;width:30px;height:20px;background-color:#ccc} .slider .hldr:before {position:absolute;content:"";height:17px;width:17px;left:2px;bottom:2px;background-color:white;transition:.2s} .slider input:checked + .hldr {background-color:#2196F3} .slider input:checked + .hldr:before {transform:translateX(9px)} .slider .hldr {border-radius:34px} .slider .hldr:before {border-radius:50%} </style> <label id=autosave class=slider> <span class=track></span> <input type=checkbox> <span class=hldr></span> <span class=label> <slot></slot> </span> </label> </template> <script> class SliderTwo extends HTMLElement { constructor() { super(); var template = document.getElementById("slider-two-template"); var templateContent = template.content; var shadowRoot = this.attachShadow({mode:"open"}); shadowRoot.appendChild(templateContent.cloneNode(true)); var chk = shadow.querySelector('[type=checkbox]'); chk.onchange = e=>{ root.checked = chk.checked; if(typeof root.onchange=='function'){ root.onchange(e); } }; Object.defineProperty(root,'checked',{get:()=>chk.checked,set:v=>chk.checked=v}); if(root.hasAttribute('checked')){ root.checked = true; } if('checked' in root){ chk.checked = root.checked; } setTimeout(()=>{ var str = root.innerHTML.trim(); if(str==''){ root.innerHTML = root.id; } },50); }//constructor }//class customElements.define('my-slider2',SliderTwo); </script> </slider-two> <my-slider2> test </my-slider2> <script> var root = document.querySelector('my-slider2'); var shadow = root.shadowRoot; var slider = shadow.querySelector('[type=checkbox]'); slider.onchange = e=>console.log(slider.checked); </script>
demo 2
test
page title designed with
textstudio.com