148 lines
3.7 KiB
HTML
148 lines
3.7 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>自定义右键菜单</title>
|
||
<link rel="stylesheet" href="http://at.alicdn.com/t/font_2223989_98p80aj9eus.css">
|
||
<link rel="stylesheet" href="./css/clear.css">
|
||
<link rel="stylesheet" href="./css/index.css">
|
||
</head>
|
||
|
||
<body>
|
||
|
||
|
||
<ul class="menu hidden">
|
||
<li>
|
||
<i class="iconfont icon-vue"></i>
|
||
<span>Vue 文档</span>
|
||
</li>
|
||
<li>
|
||
<i class="iconfont icon-react"></i>
|
||
<span>React 文档</span>
|
||
</li>
|
||
<li>
|
||
<i class="iconfont icon-angular"></i>
|
||
<span>Angular 文档</span>
|
||
</li>
|
||
<li>
|
||
<i class="iconfont icon-typescript"></i>
|
||
<span>Typescript 文档</span>
|
||
</li>
|
||
<li>
|
||
<i class="iconfont icon-shuaxin"></i>
|
||
<span>刷新</span>
|
||
</li>
|
||
</ul>
|
||
|
||
</body>
|
||
<script>
|
||
|
||
|
||
var body = $("body"),
|
||
menu = $(".menu");
|
||
|
||
var screenHeight = window.innerHeight,
|
||
screenWidth = window.innerWidth;
|
||
|
||
body.oncontextmenu = function (e) {
|
||
// 对象解构赋值
|
||
var { x, y } = e;
|
||
|
||
if ((screenHeight - y < 240) && (screenWidth - x < 180)) {
|
||
console.log("屏幕右下角");
|
||
menu.style = `
|
||
left: ${x - 180}px;
|
||
top: ${y - 240}px;
|
||
`
|
||
|
||
// 鼠标在屏幕最下面
|
||
} else if (screenHeight - y < 240) {
|
||
console.log("鼠标在屏幕最下面");
|
||
menu.style = `
|
||
left: ${x}px;
|
||
top: ${y - 240}px;
|
||
`
|
||
|
||
// 屏幕最右边
|
||
} else if (screenWidth - x < 180) {
|
||
console.log("屏幕最右边");
|
||
menu.style = `
|
||
left: ${x - 180}px;
|
||
top: ${y}px;
|
||
`
|
||
|
||
// 中间方向,空间足够的情况下直接显示
|
||
} else {
|
||
menu.style = `
|
||
left: ${x}px;
|
||
top: ${y}px;
|
||
`
|
||
}
|
||
|
||
|
||
|
||
menu.classList.remove("hidden")
|
||
|
||
// 阻止浏览器弹出默认菜单
|
||
return false;
|
||
}
|
||
|
||
// 当 body 区域被点击的时候,需要隐藏右键菜单
|
||
body.onclick = function (e) {
|
||
console.log("body被点击: ", e);
|
||
hiddenMenu()
|
||
}
|
||
|
||
// 菜单里面的li被点击的时候
|
||
_(".menu li").forEach((v, i) => {
|
||
v.onclick = (e) => {
|
||
// 阻止事件冒泡,从而触发父元素body上的点击事件
|
||
e.stopPropagation()
|
||
// 根据你点击的li标签跳转不同的页面
|
||
switch (i) {
|
||
case 0:
|
||
open("https://cn.vuejs.org/")
|
||
break;
|
||
case 1:
|
||
open("https://react.docschina.org/")
|
||
break;
|
||
case 2:
|
||
open("https://angular.cn/")
|
||
break;
|
||
case 3:
|
||
open("https://www.tslang.cn/")
|
||
break;
|
||
case 4:
|
||
location.reload()
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
hiddenMenu()
|
||
}
|
||
})
|
||
|
||
// 隐藏显示的右键菜单
|
||
function hiddenMenu() {
|
||
// 为menu菜单添加隐藏类名
|
||
menu.classList.add("hidden")
|
||
|
||
}
|
||
|
||
// 获取单个标签
|
||
function $(className) {
|
||
return document.querySelector(className)
|
||
}
|
||
|
||
// 获取多个标签
|
||
function _(className) {
|
||
return document.querySelectorAll(className)
|
||
}
|
||
|
||
</script>
|
||
|
||
</html> |