React의 컨텍스트 메뉴
17110 단어 beginnerstutorialreactreactnative
React에서 오른쪽 클릭 메뉴 만들기
class ContextMenu extends React.Component {
state = {
visible: false,
};
componentDidMount() {
document.addEventListener('contextmenu', this._handleContextMenu);
document.addEventListener('click', this._handleClick);
document.addEventListener('scroll', this._handleScroll);
};
componentWillUnmount() {
document.removeEventListener('contextmenu', this._handleContextMenu);
document.removeEventListener('click', this._handleClick);
document.removeEventListener('scroll', this._handleScroll);
}
_handleContextMenu = (event) => {
event.preventDefault();
this.setState({ visible: true });
const clickX = event.clientX;
const clickY = event.clientY;
const screenW = window.innerWidth;
const screenH = window.innerHeight;
const rootW = this.root.offsetWidth;
const rootH = this.root.offsetHeight;
const right = (screenW - clickX) > rootW;
const left = !right;
const top = (screenH - clickY) > rootH;
const bottom = !top;
if (right) {
this.root.style.left = `${clickX + 5}px`;
}
if (left) {
this.root.style.left = `${clickX - rootW - 5}px`;
}
if (top) {
this.root.style.top = `${clickY + 5}px`;
}
if (bottom) {
this.root.style.top = `${clickY - rootH - 5}px`;
}
};
_handleClick = (event) => {
const { visible } = this.state;
const wasOutside = !(event.target.contains === this.root);
if (wasOutside && visible) this.setState({ visible: false, });
};
_handleScroll = () => {
const { visible } = this.state;
if (visible) this.setState({ visible: false, });
};
render() {
const { visible } = this.state;
return(visible || null) &&
<div ref={ref => {this.root = ref}} className="contextMenu">
<div className="contextMenu--option">React Tutorials</div>
<div className="contextMenu--option">PHP Tutorials</div>
<div className="contextMenu--separator" />
<div className="contextMenu--option">All Tutorials</div>
</div>
};
}
React의 컨텍스트 메뉴 CSS
이제 이 SCSS 또는 CSS를 .scss 파일에 추가하여 반응하는 상황에 맞는 메뉴의 스타일을 지정하세요.
.contextMenu {
position: fixed;
background: white;
box-shadow: 0px 2px 10px #999999;
&--option {
padding: 6px 50px 5px 10px;
min-width: 160px;
cursor: default;
font-size: 12px;
&:hover {
background: linear-gradient(to top, #555, #333);
color: white;
}
&:active {
color: #e9e9e9;
background: linear-gradient(to top, #555, #444);
}
&__disabled {
color: #999999;
pointer-events: none;
}
}
&--separator {
width: 100%;
height: 1px;
background: #CCCCCC;
margin: 0 0 0 0;
}
}
이제 Component
구독 좋아요 공유와 긍정적인 피드백을 보내주세요.
더 많은 자습서를 보려면 visit my website .
감사:)
행복한 코딩 :)
Reference
이 문제에 관하여(React의 컨텍스트 메뉴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/readymadecode/context-menu-in-react-43d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)