1、代码实现
window.onload = function () {
(function () {
let dom = `
<div id="rightMenuBars">
<div class="rightMenu-group rightMenu-small">
<div class="rightMenu-item">
<i class="fa fa-chevron-left" aria-hidden="true"></i>
</div>
<div class="rightMenu-item">
<i class="fa fa-chevron-right" aria-hidden="true"></i>
</div>
<div class="rightMenu-item">
<i class="fa fa-refresh" aria-hidden="true"></i>
</div>
<div class="rightMenu-item">
<i class="fa fa-chevron-up" aria-hidden="true"></i>
</div>
</div>
</div>
<div id="rightMenuLinks">
<div class="rightMenu-group rightMenu-line">
<a class="rightMenu-item">
<i class="fa fa-photo" aria-hidden="true"></i>
<span>蓝猫图床</span>
</a>
<a class="rightMenu-item">
<i class="fa fa-cloud" aria-hidden="true"></i>
<span>个人云盘</span>
</a>
<a class="rightMenu-item">
<i class="fa fa-book" aria-hidden="true"></i>
<span>书籍阅读</span>
</a>
<a class="rightMenu-item">
<i class="fa fa-external-link" aria-hidden="true"></i>
<span>接口文档</span>
</a>
</div>
</div>
`;
let rightMenuDiv = document.createElement("div");
rightMenuDiv.id = "rightMenu";
let body = document.body;
rightMenuDiv.innerHTML = dom;
body.insertBefore(rightMenuDiv, body.lastChild);
let link = document.createElement("link");
link.rel = "stylesheet";
link.type = "text/css";
link.href =
"https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css";
document.head.appendChild(link);
let rightMenuStyle = document.createElement("style");
rightMenuStyle.innerHTML =
"#rightMenu{display:none;font-size:20px;position:fixed;padding:0 0.25rem;width:9rem;height:fit-content;top:10%;left:10%;background-color: rgb(calc(0 + 255 * 0.92), calc(150 + (255 - 150) * 0.92), calc(136 + (255 - 136) * 0.92));;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);transform:translateZ(0);color:#32325d;border-radius:12px;z-index:999;border:1px solid #e3e8f7;user-select:none;box-shadow:0 0 12px 4px rgba(0,0,0,0.05);transition:border 0.3s;font-weight:500;}#rightMenu:hover{border:1px solid #009688;box-shadow:0 8px 12px -3px #4259ef23;}#rightMenu .rightMenu-group{padding:0.35rem 0.3rem;transition:0.3s;}#rightMenu .rightMenu-line{border-top:1px dashed #4259ef23;}#rightMenu .rightMenu-group.rightMenu-small{display:flex;justify-content:space-between;}#rightMenu .rightMenu-group .rightMenu-item{border-radius:8px;transition:0.3s;}#rightMenu .rightMenu-line .rightMenu-item{margin:0.25rem 0;padding:0.25rem 0;}#rightMenu .rightMenu-group a{background-color:transparent;color:#32325d;text-decoration:none;transition:all 0.2s ease 0s;overflow-wrap:break-word;-webkit-user-drag:none;}#rightMenu .rightMenu-group.rightMenu-line .rightMenu-item{display:flex;}#rightMenu .rightMenu-group .rightMenu-item:hover{cursor: pointer !important;background-color:#009688;color:#fff;box-shadow:0 8px 12px -3px #4259ef23;}#rightMenu .rightMenu-group .rightMenu-item i{display:inline-block;text-align:center;line-height:1.5rem;width:1.5rem;padding:0 0.25rem;font-size:18px;color:#32325d;}#rightMenu .rightMenu-line .rightMenu-item i{margin:0 0.25rem;}#rightMenu .rightMenu-group .rightMenu-item span{line-height:1.5rem;}.rightMenu-small .rightMenu-item{width:30px;height:30px;line-height:30px;display:flex;align-items:center;justify-content:center;}";
document.getElementsByTagName("head").item(0).appendChild(rightMenuStyle);
})();
let rightMenu = document.getElementById("rightMenu");
if (rightMenu) {
let rm = {};
rm.showRightMenu = function (e, t = 0, l = 0) {
let o = rightMenu;
o.style.cssText = `top: ${t}px; left: ${l}px`;
e ? (o.style.display = "block") : (o.style.display = "none");
};
rm.hideRightMenu = function () {
rm.showRightMenu(!1);
};
let rmWidth = parseInt(rightMenu.style.width);
let rmHeight = parseInt(rightMenu.style.height);
document.onkeydown = () => {
let e = window.event || arguments[0];
if (e.keyCode == 123) {
return false;
} else if (e.ctrlKey && e.shiftKey && e.keyCode == 73) {
return false;
} else if (e.shiftKey && e.keyCode == 121) {
return false;
}
};
window.oncontextmenu = function (e) {
e.preventDefault();
e = e || window.event;
if (document.body.clientWidth > 768) {
let t = e.clientY;
let l = e.clientX + 10;
return (
(rmWidth = rmWidth || 155),
(rmHeight = rmHeight || 255),
l + rmWidth > window.innerWidth && (l -= rmWidth + 10),
t + rmHeight > window.innerHeight &&
(t -= t + rmHeight - window.innerHeight),
rm.showRightMenu(!0, t, l),
!1
);
}
};
document.addEventListener("click", (e) => {
if (!e.target.closest("#rightMenu")) {
rightMenu.style.display = "none";
}
});
document.getElementById("rightMenuBars").addEventListener("click", (e) => {
const inner = e.target?.className;
switch (inner) {
case "fa fa-chevron-left":
history.back();
break;
case "fa fa-chevron-right":
history.forward();
break;
case "fa fa-refresh":
window.location.reload();
break;
case "fa fa-chevron-up":
let scrollTop = document.documentElement.scrollTop - 0;
let t = setInterval(function () {
scrollTop = scrollTop / 2;
if (scrollTop <= 5) {
clearInterval(t);
scrollTop = 0;
}
document.documentElement.scrollTop = scrollTop + 0;
}, 16.666);
break;
}
rm.hideRightMenu();
});
document.getElementById("rightMenuLinks").addEventListener("click", (e) => {
const tag = e.target?.tagName?.toLowerCase();
const inner = e.target?.innerText;
if (tag === "a" || tag === "span" || tag === "i") {
rm.hideRightMenu();
}
switch (inner) {
case "蓝猫图床":
window.open("https://bluecat.likepoems.com");
break;
case "个人云盘":
window.open("https://pan.likepoems.com");
break;
case "接口文档":
window.open("https://api.likepoems.com/");
break;
case "书籍阅读":
window.open("https://reader.likepoems.com/");
break;
}
});
}
};
2、效果演示
![博客右键菜单js实现"](https://i-blog.csdnimg.cn/blog_migrate/2c20dd8094015c13dc19e4493d76c6f1.gif#pic_center)