效果图:
App.jsx
import React, { Component } from 'react'
import style from './index.module.less'
export default class App extends Component {
state = { width: 0, left: 0}
enter = (event) => {
const {clientWidth, offsetLeft } = event.target
this.setState({
width: clientWidth,
left: offsetLeft
})
}
leave = () => {
this.setState(() =>({ width: 0 }) )
}
render () {
const { width, left } = this.state
return (
<>
<div className={ style.header }>
<ul ref="ul" onMouseLeave={ this.leave } >
<li onMouseEnter={ this.enter }>首页</li>
<li onMouseEnter={ this.enter }>导航一</li>
<li onMouseEnter={ this.enter }>导航二</li>
<li onMouseEnter={ this.enter }>导航三</li>
<li onMouseEnter={ this.enter }>导航四</li>
</ul>
<div className={style.line} style={{width: width, left: left, height: '2px'}}></div>
</div>
</>
)
}
}
App.module.less
.header {
position: relative;
padding-left: 50px;
ul {
display: flex;
margin: 0;
padding: 0;
li {
list-style: none;
padding: 10px;
cursor: pointer;
font-weight: 500;
&:hover{
color: orangered
}
}
}
.line {
position: absolute;
bottom: 0;
transition: .3s cubic-bezier(.4,0,.2,1);
background-color: #c7000b;
}
}
发表回复