JavaScript의 사용자 정의 오른쪽 클릭 상황에 맞는 메뉴
19557 단어 htmljavascriptbeginnerswebdev
마우스 왼쪽 클릭을 더 많이 사용합니다. 그러나 대부분의 대형 웹 사이트 또는 응용 프로그램에서 마우스 오른쪽 버튼을 사용하는 경우. 이러한 유형의 사용자 지정 오른쪽 클릭 메뉴는 Windows 및 기타 모든 운영 체제에서도 사용됩니다. Watch its live demo 작동 방식을 알아보십시오.
여기에서는 간단한 JavaScript 오른쪽 클릭 컨텍스트 메뉴를 만들 것입니다. 그리고 제가 만든 방법에 대한 완전한 정보를 공유하겠습니다.
JavaScript 사용자 정의 오른쪽 클릭 메뉴
이 유형의 사용자 정의 상황에 맞는 메뉴는 웹 페이지의 아무 곳이나 마우스 오른쪽 버튼으로 클릭할 때 나타납니다. 사용자 정의 메뉴 표시줄을 숨기려면 다시 마우스 왼쪽 버튼을 클릭합니다.
보시다시피 마우스 오른쪽 버튼을 클릭하면 작은 상자가 나타납니다. 그 상자에는 몇 가지 메뉴 항목이 있습니다. 이 메뉴 대신 다른 것을 사용할 수 있지만.
아래에는 모든 코드와 코드 생성 방법이 나와 있습니다.
HTML 코드
먼저 몇 줄의 간단한 html을 사용하여 메뉴 항목을 추가했습니다. 사용된 5가지 메뉴입니다. 이 메뉴의 양을 늘릴 수 있습니다.
<div id="context-menu">
<div class="item">View</div>
<div class="item">Refresh</div>
<div class="item">Copy</div>
<div class="item">Customize</div>
<div class="item">Save As</div>
</div>
CSS 코드
이제 css로 메뉴 항목과 오른쪽 클릭 컨텍스트 메뉴를 디자인했습니다.
'visibility: hidden'
이 완료되었습니다. 이는 정상적인 조건에서는 메뉴 표시줄을 볼 수 없음을 의미합니다. hover effect
를 추가했습니다.* {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
background-color: #dfe8f1;
}
#context-menu {
background-color: #ffffff;
box-shadow: 0 0 20px rgba(37, 40, 42, 0.22);
color: #1f194c;
width: 10em;
padding: 0.8em 0.6em;
font-size: 1.3rem;
position: fixed;
visibility: hidden;
}
.item {
padding: 0.3em 1.2em;
}
.item:hover {
background-color: rgba(44, 141, 247, 0.2);
cursor: pointer;
}
자바스크립트
이제 JavaScript를 사용하여 오른쪽 클릭 컨텍스트 메뉴를 활성화할 차례입니다. 이 경우 JavaScript의 모든 줄에는 필요한 설명이 있습니다.
초보자라도 이해하는데 어려움이 없을 것입니다.
//Events for desktop and touch
let events = ["contextmenu", "touchstart"];
//initial declaration
var timeout;
//for double tap
var lastTap = 0;
//refer menu div
let contextMenu = document.getElementById("context-menu");
//same function for both events
//event type is a data structure that defines the data contained in an event
events.forEach((eventType) => {
document.addEventListener(
eventType,
(e) => {
//preventDefault() method stops the default action of a selected element from happening by a user
e.preventDefault();
//x and y position of mouse or touch
//mouseX represents the x-coordinate of the mouse
let mouseX = e.clientX || e.touches[0].clientX;
//mouseY represents the y-coordinate of the mouse.
let mouseY = e.clientY || e.touches[0].clientY;
//height and width of menu
//getBoundingClientRect() method returns the size of an element and its position relative to the viewport
let menuHeight = contextMenu.getBoundingClientRect().height;
let menuWidth = contextMenu.getBoundingClientRect().width;
//width and height of screen
//innerWidth returns the interior width of the window in pixels
let width = window.innerWidth;
let height = window.innerHeight;
//If user clicks/touches near right corner
if (width - mouseX <= 200) {
contextMenu.style.borderRadius = "5px 0 5px 5px";
contextMenu.style.left = width - menuWidth + "px";
contextMenu.style.top = mouseY + "px";
//right bottom
if (height - mouseY <= 200) {
contextMenu.style.top = mouseY - menuHeight + "px";
contextMenu.style.borderRadius = "5px 5px 0 5px";
}
}
//left
else {
contextMenu.style.borderRadius = "0 5px 5px 5px";
contextMenu.style.left = mouseX + "px";
contextMenu.style.top = mouseY + "px";
//left bottom
if (height - mouseY <= 200) {
contextMenu.style.top = mouseY - menuHeight + "px";
contextMenu.style.borderRadius = "5px 5px 5px 0";
}
}
//display the menu
contextMenu.style.visibility = "visible";
},
{ passive: false }
);
});
//for double tap(works on touch devices)
document.addEventListener("touchend", function (e) {
//current time
var currentTime = new Date().getTime();
//gap between two gaps
var tapLength = currentTime - lastTap;
//clear previous timeouts(if any)
//The clearTimeout() method clears a timer set with the setTimeout() method.
clearTimeout(timeout);
//if user taps twice in 500ms
if (tapLength < 500 && tapLength > 0) {
//hide menu
contextMenu.style.visibility = "hidden";
e.preventDefault();
} else {
//timeout if user doesn't tap after 500ms
timeout = setTimeout(function () {
clearTimeout(timeout);
}, 500);
}
//lastTap set to current time
lastTap = currentTime;
});
//click outside the menu to close it (for click devices)
document.addEventListener("click", function (e) {
if (!contextMenu.contains(e.target)) {
contextMenu.style.visibility = "hidden";
}
});
원하는 경우 위의 비디오를 시청하여 이 사용자 정의 오른쪽 클릭(컨텍스트 메뉴)이 어떻게 작동하는지 더 잘 알 수 있습니다.
여기서는 최대한 설명하려고 노력했습니다. 그래도 문제가 있으면 댓글로 알려주세요.
이 JavaScript Custom Right Click Context Menu가 마음에 드시면 댓글을 달아주세요.
Reference
이 문제에 관하여(JavaScript의 사용자 정의 오른쪽 클릭 상황에 맞는 메뉴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shantanu_jana/custom-right-click-context-menu-in-javascript-4112텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)