Tabulator のチェックONOFFデザインを持ってくる。(3)

Tabulator のチェックONOFFデザインを持ってくる。(1) - Oboe吹きプログラマの黙示録

Tabulator のチェックONOFFデザインを持ってくる。(2) - Oboe吹きプログラマの黙示録

SVG でも、innerHTML できるようにする Polyfill - Oboe吹きプログラマの黙示録

次に input type="checkbox" への適用です。svgタグで innerHTMLを働かせるようにすることが
前提でこのチェックBOX適用ができます。

HTML

<div id="activediv" class="design-check">
     <input id="active" type="checkbox"><label for="active"><svg class="chk-off"></svg><span>使用する</span></label>
</div>

CSS

div.design-check{
   background-color: #f0f0f0;
   position: relative;
   height: 40px;
   line-height: 40px;
   padding: 4px;
   vertical-align: middle;
}
.design-check svg{
   width: 14px;
   height: 14px;
   border: 2px solid #c0c0c0;
   border-radius: 4px;
   background-color: #f0f0f0;
}
svg.chk-on path{
   fill: #2dc214;
   clip-rule: evenodd;
   fill-rule: evenodd;
}
svg.chk-off path{
   fill: #ce1515;
}

.design-check svg{
   display: inline-flex;
}
.design-check label{
   background-color: #f0f0f0;
   display: inline-flex;
   height: 18px;
   position: absolute;
   left: 4px;
   top: 12px;
}
.design-check label span{
   position: absolute;
   left: 24px;
   top: -10px;
   white-space: nowrap;
}

JavaScript : svg の path d属性はここで書くと長すぎるので
省略形で書いています。
Tabulator のチェックONOFFデザインを持ってくる。(1) - Oboe吹きプログラマの黙示録
に、d属性値全体を載せてます

svg に bind で独自イベント&ハンドラを定義して checkbox 変更イベントで、svgを書き換えます

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/innersvg-polyfill@0.0.2/innersvg.min.js"></script>
<script type="text/javascript">
$(function(){

   var onPathBody  = '<path d="M21.652,3.211---(省略)-------1L21.652,3.211z"></path>';
   var offPathBody = '<path d="M22.245,4.015---(省略)-------0L22.245,4.015z"></path>';

   $('svg').attr('viewBox', '0 0 24 24');
   $('svg.chk-on').html(onPathBody);
   $('svg.chk-off').html(offPathBody);

   $('svg').bind('cssClassChanged', function(){
      if ($(this).hasClass('chk-on')){
         $(this).html(onPathBody);
      }
      if ($(this).hasClass('chk-off')){
         $(this).html(offPathBody);
      }
   });

   $('#active').change(function(){
      if ($(this).prop("checked")){
         $("label[for='" + $(this).prop("id") + "'] svg").removeClass("chk-off").addClass("chk-on").trigger("cssClassChanged");
      }else{
         $("label[for='" + $(this).prop("id") + "'] svg").removeClass("chk-on").addClass("chk-off").trigger("cssClassChanged");
      }
   });

});
</script>

表示は、
チェックOFFで
f:id:posturan:20180820101252j:plain
チェックON で
f:id:posturan:20180820101311j:plain