React
by Shawn Wood
HTML
<script src="cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="app"></div>
<div id="debugger">
</div>
CSS
.wrapper{
}
.toggle_radio{
position: relative;
background: rgba(244,244,244,1);
margin: 0px 0px;
overflow: hidden;
padding: 0 !important;
-webkit-border-radius: 0.25em;
-moz-border-radius: 0.25em;
border-radius: 0.25em;
position: relative;
height: 46px;
width: 322px;
}
.toggle_radio{
border: 1px #ccc solid;
}
.toggle_radio > * {
float: left;
}
.toggle_radio input[type=radio]{
display: none;
/*position: fixed;*/
}
.toggle_radio label{
color: #000;
z-index: 0;
display: block;
padding-top: 5px;
width: 100px;
height: 38px;
margin: 3px 3px;
/*
-webkit-border-radius: 0.25em;
-moz-border-radius: 0.25em;
border-radius: 0.25em;*/
cursor: pointer;
z-index: 1;
/*background: rgba(0,0,0,.1);*/
text-align: center;
/*margin: 0 2px;*/
/*background: blue;*/ /*make it blue*/
}
.toggle_radio > label:not(:nth-child(4)){
border-left: 1px #ccc solid;
}
.toggle_option_slider{
/*display: none;*/
/*background: red;*/
color: #000;
width: 100px;
height: 40px;
position: absolute;
top: 0px;
padding-top: 5px;
border: 1px #ccc solid;
-webkit-border-radius: 0.25em;
-moz-border-radius: 0.25em;
border-radius: 0.25em;
-webkit-transition: all .4s ease;
-moz-transition: all .4s ease;
-o-transition: all .4s ease;
-ms-transition: all .4s ease;
transition: all .4s ease;
}
#mySavedFilt:checked ~ .toggle_option_slider{
content:"Knives";
color: #000;
background: rgba(255,255,255,1);
left: 3px;
}
#globalFilt:checked ~ .toggle_option_slider{
content:"Forks";
color: #000;
background: rgba(255,255,255,1);
left: 109px;
}
#sharedFilt:checked ~ .toggle_option_slider{
content:"Spoons";
color: #000;
background: rgba(255,255,255,1);
left: 215px;
}
React
var getSelected = function(){
let thisId = $('.toggle_radio input[type="radio"]:checked').attr('id'),
thisValue = $('label[for="' + thisId + '"]').attr('data-value');
$('.toggle_option_slider').html(thisValue);
}
class SegmentedControl extends React.Component {
constructor(props) {
super(props)
this.myButtons = {
buttons: [
{ id: "mySavedFilt", text: "My Shared", active: true },
{ id: "globalFilt", text: "Global", active: false },
{ id: "sharedFilt", text: "Shared", active: false }
]
}
this.filterClicks = this.filterClicks.bind(this);
}
filterClicks() {
getSelected();
var thisID = $(this);
console.log(thisID);
//var thisDebug = JSON.stringify(thisID);
//$('#debugger').append(thisDebug);
}
render() {
return (
<div class="wrapper">
<div class="toggle_radio">
{this.myButtons.buttons.map(item => (
<input type="radio" name="options" class="toggle_option" id={item.id} autocomplete="off" checked={item.active} />
))}
{this.myButtons.buttons.map(item => (
<label for={item.id} key={item.id} data-value={item.text} onClick={this.filterClicks}> {item.text} </label>
))}
<label class="toggle_option_slider"></label>
</div>
</div>
)
}
}
ReactDOM.render(<SegmentedControl />, document.querySelector("#app"))
$(document).ready(function() {
getSelected();
//$('.toggle_radio input[type="radio"]').on('change', function(event) {
//getSelected();
//});
});