有一个脚本可以使用 css 样式更改滑块的位置。当滑块单独时,一切正常。但如果你将它们相乘,问题就开始了。如何解决这种情况?
$(document).ready(function() {
$('#show').on('click', function() {
console.log($('input[name=size]:checked', '.product__size-control').val());
});
$('.product__size-control-input').on('click', function(){
let value = Number.parseInt(this.value);
let currentElement = $(this).parent().parent().find('.product__size-control-selector');
let currentLabel = $(this).parent().find('.product__size-control-label');
console.log(value);
switch(value){
case 1: currentElement.css('transform', 'translateX(0%)');
break;
case 2: currentElement.css('transform', 'translateX(100%)');
break;
case 3: currentElement.css('transform', 'translateX(200%)');
break;
}
});
});
* {
box-sizing: border-box;
}
::-webkit-input-placeholder {
color: #878686;
}
::-moz-placeholder {
color: #878686;
}
:-ms-input-placeholder {
color: #878686;
}
:-moz-placeholder {
color: #878686;
}
::-ms-clear, ::-ms-reveal {
display: none;
}
.product__size-control {
position: relative;
display: flex;
margin: 0 0 16px;
padding: 0;
background-color: #f1f2f5;
border-radius: 100px;
}
.product__size-control-selector {
position: absolute;
top: 0;
left: 0;
-webkit-transform: translateX(0);
transform: translateX(0);
width: 0;
height: 100%;
transition: -webkit-transform .2s ease-out;
transition: transform .2s ease-out;
transition: transform .2s ease-out, -webkit-transform .2s ease-out;
background-color: #fff;
border: 1px solid #babfd0;
border-radius: 100px;
}
.product__size-control-item {
position: relative;
list-style: none;
display: inline-block;
vertical-align: top;
width: 33.33333%;
flex-grow: 1;
}
.product__size-control-label {
position: relative;
cursor: pointer;
border-radius: 100px;
border: 1px solid transparent;
display: inline-block;
height: 28px;
width: 100%;
color: rgba(55, 53, 53, .7);
font-size: 12px;
line-height: 26px;
font-family: Dodo Medium, Helvetica, Arial, sans-serif;
text-align: center;
transition: color .2s ease-out;
}
.product__size-control-label:hover {
color: #373535;
}
.product__size-control-label:focus {
outline: 0;
}
.product__size-control-input {
position: absolute;
left: -9999px;
}
.product__size-control-input:checked + .product__size-control-label {
color: #373535;
}
/*! CSS Used from: Embedded */
input {
color: inherit;
font: inherit;
margin: 0;
}
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type=radio] {
box-sizing: border-box;
padding: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="product__size-control">
<div class="product__size-control-selector" style="width: 33.3333%; transform: translateX(0%);"></div>
<div class="product__size-control-item">
<input type="radio" class="product__size-control-input" id="size_20_3"name="size" value="1" checked="">
<label class="product__size-control-label" data-testid="menu__pizza_size_3"
for="size_20_3">35 см</label>
</div>
<div class="product__size-control-item">
<input type="radio" class="product__size-control-input" id="size_20_2" name="size" value="2">
<label class="product__size-control-label" data-testid="menu__pizza_size_2"
for="size_20_2">30 см</label>
</div>
<div class="product__size-control-item">
<input type="radio" class="product__size-control-input" id="size_20_1"name="size" value="3">
<label class="product__size-control-label" data-testid="menu__pizza_size_1"
for="size_20_1">25 см</label>
</div>
</div>