Я пытаюсь сделать что-то подобное на моем ReactJS сайте:
![Work solution example](https://i.stack.imgur.com/fh6vL.gif)
Я пытался сделать это сам и получил рабочий результат, но в Реализация моего мнения очень сложна и обременительна. Ниже я разместил код моей реализации.
JS:
import React from "react"
import switchStyles from "./switch.module.scss"
class LinkSwitch extends React.Component {
constructor() {
super();
this.state = {
isHover: false,
email: false,
phone: false
};
}
handleHoverEmail = () => this.setState({ isHover: !this.state.isHover, email: !this.state.email })
handleHoverPhone = () => this.setState({ isHover: !this.state.isHover, phone: !this.state.phone })
render() {
return (
<div
className={`${switchStyles.hoverContainer} ${this.state.email ? switchStyles.activeEmail : ""}${this.state.phone ? switchStyles.activePhone : ""}`}
>
<a
className={switchStyles.ctaButton}
onMouseEnter={this.handleHoverEmail}
>
почта
</a>
<a className={switchStyles.ctaButtonEmail__hover} onMouseLeave={this.handleHoverEmail}>info@adnosov.ru</a>
<a
className={switchStyles.ctaButton}
onMouseEnter={this.handleHoverPhone}
>
телефон
</a>
<a className={switchStyles.ctaButtonPhone__hover} onMouseLeave={this.handleHoverPhone}>+7 992 020 1025</a>
</div>
)
}
}
export default LinkSwitch
S CSS:
.hover-container {
width: fit-content;
}
.hover-container > a:first-child:after {
content: '/';
background-size: contain;
background-repeat: no-repeat;
background-position: center;
display: inline-block;
margin: 0 0;
font-weight: 500;
}
.cta-button-email__hover {
display: block;
opacity: 0;
visibility: hidden;
position: absolute;
white-space: nowrap;
top: 0;
left: 0;
z-index: 1;
}
.cta-button-phone__hover {
display: block;
opacity: 0;
visibility: hidden;
position: absolute;
white-space: nowrap;
top: 0;
left: 0;
z-index: 1;
}
.active-email .cta-button-email__hover {
opacity: 1;
visibility: visible;
}
.active-phone .cta-button-phone__hover {
opacity: 1;
visibility: visible;
}
.active-email .cta-button {
opacity: 0;
}
.active-phone .cta-button {
opacity: 0;
}
Используя два состояния, указав c classNames для номера телефона и электронной почты, я думаю, плохой код. Буду рад любой помощи! Может быть, кто-то может предложить более простые и оптимальные решения.