console
let list = document.querySelectorAll('.item');
let bar = document.querySelector('.bar');
for (let i = 0; i < list.length; i++) {
list[i].addEventListener('click', function(){
let that = this;
let nextIdx = i;
let onIdx = 0;
if (that.classList.contains('on')) {
return false;
}
let onObj = document.querySelector('.on');
for (let i = 0; i < list.length; i++) {
if (list[i] === onObj) {
onIdx = i;
}
}
if (nextIdx > onIdx) {
bar.classList.add('bar-head');
bar.classList.remove('bar-tail');
} else if (nextIdx < onIdx) {
bar.classList.add('bar-tail');
bar.classList.remove('bar-head');
}
switch (nextIdx) {
case 0:
bar.style.left = '0%';
bar.style.right = '66.6667%';
break;
case 1:
bar.style.left = '33.3333%';
bar.style.right = '33.3333%';
break;
case 2:
bar.style.left = '66.6667%';
bar.style.right = '0';
break;
}
for (let i = 0; i < list.length; i++) {
list[i].classList.remove('on');
}
that.classList.add('on');
}, false);
}
<div class="list" id="J_list">
<div class="item on">已发货</div>
<div class="item">未发货</div>
<div class="item">全部订单</div>
<div class="bar bar-head"></div>
</div>
.list {
margin: 0;
padding: 0;
position: relative;
display: flex;
width: 100%;
}
.item {
flex-grow: 1;
list-style: none;
font-size: 3em;
text-align: center;
}
.bar {
position: absolute;
bottom: -.5em;
left: 0;
right: 66.6667%;
height: .5em;
background-color: #f60;
}
.bar-head {
transition: right 0.3s cubic-bezier(0.35, 0, 0.25, 1), left 0.3s cubic-bezier(0.35, 0, 0.25, 1) 0.09s;
}
.bar-tail {
transition: right 0.3s cubic-bezier(0.35, 0, 0.25, 1) 0.09s, left 0.3s cubic-bezier(0.35, 0, 0.25, 1);
}