原生js实现自定义右键菜单进行颜色切换

本文介绍了一种使用原生JavaScript实现自定义右键菜单并进行颜色切换的方法。通过2重闭包来管理菜单的显示与隐藏,菜单效果类似于导航栏的下拉框。提供了一个简单的代码实例,包括HTML、CSS和JavaScript部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单来说就是js中用了个2重闭包,至于菜单,和导航栏的下拉框一样,不用时隐藏,使用时显示。

直接上代码了,比较简单。

效果图:

效果图

 

html:

<!DOCTYPE html>
<html>
<head>
	<title>practice</title>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="test13.css">
</head>
<body>
	<div id="container" class="center-spacearound" style="flex-wrap: wrap;">
		<div class="box center-all">右键改变颜色</div>
		<div class="box center-all">右键改变颜色</div>
		<div class="box center-all">右键改变颜色</div>
		<div class="box center-all">右键改变颜色</div>
		<ul class="rightmenu">
            <li class="center-all rightmenu-li" style="background-color: green;">绿色</li>
            <li class="center-all rightmenu-li" style="background-color: blue;">蓝色</li>
            <li class="center-all rightmenu-li" style="background-color: pink;">粉色</li>
            <li class="center-all rightmenu-li" style="background-color: brown;">棕色</li>
        </ul>
	</div>
	<script type="text/javascript" src="test13.js"></script>
</body>
</html>

 

 

css:

/*------------------------公共样式表----------------------------*/
* {
	margin: 0px;
	padding: 0px;
	border: 0px;
}
.center-spacearound {
    display: flex;
    align-items: center;
    justify-content: space-around;
}
.center-all {
    display: flex;
    align-items: center;
    justify-content: center;
}
/*------------------------功能样式表----------------------------*/
#container {
    width: 900px;
    height: 300px;
    margin: 15px auto;
    background-color: yellow;
    border-radius: 15px;
    z-index: 0;
}
.box {
    width: 200px;
    height: 200px;
    background-color: red;
    color: white;
    font-size: 26px;
    cursor: pointer;
    z-index: 1;
}
.rightmenu {
    display: none;
    position: absolute;
    /*margin-top: 109px;*/
    z-index: 2;
    cursor: pointer;
}
.rightmenu-li {
    width: 154px;
    height: 41px;
    border-bottom: 1px solid #DDDDDD;
    color: white;
}

 

 

js:

var namelist = ["green", "blue", "pink", "brown"];
var boxitem = document.getElementsByClassName("box");
var rightmenu = document.getElementsByClassName("rightmenu");
var rightli = document.getElementsByClassName("rightmenu-li");
for (var i = 0; i < boxitem.length; i++) {
	(function(i){
	    boxitem[i].oncontextmenu = function(obj) {
		    if (!obj) obj = event || window.event;
		    if (obj.button==2) {
			    obj.preventDefault();
		    	// console.log(obj.clientX);
		    	// console.log(obj.clientY);
		    	rightmenu[0].style.display = "block";
		    	rightmenu[0].style.left = obj.clientX + "px";
		    	rightmenu[0].style.top = obj.clientY + "px";
		    	for (var j = 0; j < rightli.length; j++) {
		    		(function(j){
						rightli[j].onclick = function() {
							boxitem[i].style.backgroundColor = namelist[j];
						}
					})(j)
		    	}
		    }
		}
	})(i)
}
window.onclick = function() {
	rightmenu[0].style.display = "none";
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值