js实现点击下划线跟随的效果!

   闲来无事,写了一个小demo,练一练许久没写的原生js,

具体实现上代码

<template>
    <div class="container">
        <div class="content manpower">
              <ul class="react-sticky" id="oul">
                  <li :class="toogleindex === 0 ? 'active' : ''" @click=" getuser(0)">1 tabs</li>   
                  <li :class="toogleindex === 1 ? 'active' : ''" @click="getuser(1)">2 tabs</li> 
                  <li :class="toogleindex === 2 ? 'active' : ''" @click=" getuser(2)">3 tabs</li> 
                  <li :class="toogleindex === 3 ? 'active' : ''" @click="getuser(3)">4 tabs</li> 
                  <li :class="toogleindex === 4 ? 'active' : ''" @click="getuser(4)">5 tabs</li> 
                  <span class="line" ref="boxborder" id="boxborder"></span>
              </ul>
              <!-- <div></div> -->
        </div>
        <item-footer/>
    </div>
</template>
<script>
import ItemFooter from '@/components/Footer/footer';
// import { setInterval, clearInterval } from 'timers';
// import { getToday ,getToMonth,getPreMontAllDate, getPreMonth } from '@/utils/date'
export default {
    name:"manpower",
    data() {
       return {
           toogleindex:0,
           flag:true
       }
    },
    components:{
        ItemFooter
    },
    computed:{},
    mounted(){
        // console.log(getToday())
        // console.log(getToMonth())
        // console.log(getPreMontAllDate(2))
        // console.log(getPreMonth('2019-07-16',12).slice(0,7))
    },
    methods:{
        getuser(num){
            var timer
            var btn = document.getElementById('boxborder');
            var oul = document.getElementById('oul').children[0];
            if(this.flag){
                this.flag = false;
                var btn = document.getElementById('boxborder');
                var btnTop = document.getElementById('boxborder').offsetTop;
                if(num > this.toogleindex){
                    timer = setInterval( ()  => {
                        if(btnTop  >= this.toogleindex * oul.clientHeight){
                            clearInterval(timer)
                            this.flag = true;
                        }else{
                            btnTop+=4
                            btn.style.top = btnTop + 'px';
                        }
                    },1)
                }else{
                    timer = setInterval( ()  => {
                        if(btnTop <= this.toogleindex * oul.clientHeight){
                            clearInterval(timer)
                            this.flag = true;
                        }else{
                            btnTop-=4
                            btn.style.top = btnTop + 'px';
                        }
                    },1)
                }
                this.toogleindex = num
            }  
        },
        changeHandler(cur) {
            // console.log('Z和i')
            this.current = cur;
            // console.log(cur)
        }
    }
}
</script>
<style lang="less">
.react-sticky{
    width:100px;
    margin:100px auto;
     position: relative;
    li{
        background: #fff;
        height:50px;
       
        text-align: center;
        line-height: 50px;
        border-right:1px solid transparent;
        &.active{
            color:#108ee9;
            // border-right: 1px solid #108ee9;
            box-sizing: border-box;
            // transition: 1s all linear;
        }
        
    }
    .line{
          display: block;
          position: absolute;
          right:0;
          top:0;
          width: 2px;
          height:50px;
          background:#108ee9;
        }
    
}
</style>

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值