html
<div class="personSelect-info">
<div v-for="item in selectList" :key="item.title" @click="select(item)"
:class="selectInfo == item.id ? 'person-after' : ''">
<p>
{{ item.title }}
<!-- <img :src="item.selectImg" alt v-if="selectInfo == item.id" />
<img :src="item.img" alt v-if="selectInfo
!= item.id" /> -->
</p>
</div>
<div class="select">
<p>系列筛选</p>
</div>
<div class="list" :style="`transform:translateX(${offsetW}px);`"></div>
</div>
然后动态获取offsetLeft
mounted() {
this.$nextTick(() => {
this.offsetW =document.getElementsByClassName('person-after')[0].offsetLeft
})
// 屏幕变化重新获取
window.onresize = () => {
this.offsetW =document.getElementsByClassName('personafter-')[0].offsetLeft
}
},
//切换重新赋值
select(item) {
this.selectInfo = item.id
this.$emit('select', item)
this.$nextTick(() => {
this.offsetW =document.getElementsByClassName('person-after')[0].offsetLeft
})
},
css
.personSelect {
margin-bottom: 20px;
&-info {
// display: flex;
// align-items: center;
padding-left: 40px;
border-bottom: 6px solid #ececec;
position: relative;
>div {
display: inline-block;
width: 180px;
}
>.select {
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
}
.list {
transition-duration: 0.5s;
width: 180px !important;
height: 6px;
background: #2f2d3d;
border-radius: 4px;
position: absolute;
bottom: -6px;
left: 0px;
}
p {
@include pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
padding: 30px 0;
width: 100%;
white-space: nowrap;
>img {
margin-left: 10px;
}
}
.person-after {
p {
color: #5942ff;
font-weight: bold;
}
}
}
}