问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何自定义js鼠标右键菜单,替换原有的右键菜单

发布网友 发布时间:2022-04-07 05:57

我来回答

2个回答

懂视网 时间:2022-04-07 10:18

1、使用方式

js文件引入<script src="RightMenu.js"></script>

初始化:

let rightMenu = new RightMenu({
 targetId:'menu',//需要改变右键菜单的元素id
 menuItems: items//菜单项数据,json数组
 })

2、menuItems参数

items = [
 {
 id: 'aa',//菜单id
 text: 'ccc',//菜单文字,可以是html元素
 show: true, //菜单是否显示
 active: false,//菜单是否可用
 style: 'item-unactive'
 }
]

3、方法

setItems(menuItems) 设置菜单。动态设置菜单

hide() 隐藏菜单

on(eventType, event) 事件监听

4、事件

itemClick 菜单项点击,回调函数参数为菜单项的所有属性

例:

rightMenu.on('itemClick',(param) => {
 console.log(param)
 if(param.active === false){
 return
 }
 alert(JSON.stringify(param))
 // rightMenu.hide()
})

createBefore 菜单内容生成前调用,可以实现动态菜单设置

例:

rightMenu.on('createBefore',(param) => {
 rightMenu.setItems(items1)
})

注:暂不支持级联功能

代码:

class RightMenu{
 constructor(param){
 this.targetId = param.targetId
 this.ele = document.querySelector('#' + this.targetId)
 console.assert(this.ele != null, '未找到id=' + this.targetId + '的元素')
 this.menu = null
 this.menuItems = param.menuItems
 this._menuItems = {}
 this.itemDefaultClass = 'item-default'
 this.event = {
 itemClick: null,
 createBefore: null
 }
 this.flag = true
 this.init()
 }
 
 init(){
 let that = this
 that.createMenu()
 this.ele.oncontextmenu = function(ee) {
 let e = ee || window.event;
 //鼠标点的坐标
 let oX = e.clientX;
 let oY = e.clientY;
 //菜单出现后的位置
 that.menu.style.display = "block";
 that.menu.style.left = oX + "px";
 that.menu.style.top = oY + "px";
 that.createMenu()
 //阻止浏览器默认事件
 return false;//一般点击右键会出现浏览器默认的右键菜单,写了这句代码就可以阻止该默认事件。
 }
 document.oncontextmenu = function(ee){
 let e = ee || window.event;
 if(e.target.id !== that.targetId && e.target.dataset.type != 'item'){
 that.menu.style.display = "none"
 }
 }
 document.onclick = function(ee) {
 let e = ee || window.event;
 that.menu.style.display = "none"
 }
 that.menu.onclick = function(ee) {
 let e = ee || window.event;
 if(e.target.dataset.type == 'item'){
 if(that.event.itemClick instanceof Function){
 that.event.itemClick(that._menuItems[e.target.id])
 }
 }
 e.cancelBubble = true;
 }
 this.menu.onmouseover = function(ee){
 that.flag = true
 }
 this.menu.onmouseleave = function(ee){
 that.flag = false
 }
 }
 createMenu(){
 if(this.menu == null){
 this.menu = document.createElement('div')
 this.menu.className = 'menu-default'
 document.body.appendChild(this.menu)
 }
 
 let mark = true
 if(this.event.createBefore instanceof Function){
 mark = this.event.createBefore()
 }
 if(mark){
 this.creatItem()
 }
 }
 _bindOncontextmenu(obj){
 obj.oncontextmenu = function(ee){
 ee.target.click()
 return false
 }
 }
 creatItem(){
 if(this.menuItems.length == 0){
 return
 }
 let fragement = document.createDocumentFragment()
 let temp = null
 let tempItem = null
 for (let i = 0, len = this.menuItems.length; i < len; i++){
 tempItem = this.menuItems[i]
 if(tempItem.show === false){
 continue
 }
 temp = document.createElement('div')
 temp.id = tempItem.id
 temp.innerHTML = tempItem.text
 temp.className = tempItem.style || 'item-default'
 temp.dataset.type = 'item'
 
 this._menuItems[tempItem.id] = tempItem
 fragement.appendChild(temp)
 this._bindOncontextmenu(temp)
 }
 this.menu.innerHTML = ''
 this.menu.appendChild(fragement)
 }
 
 on(type,event){
 this.event[type] = event
 }
 
 hide(){
 this.menu.style.display = 'none'
 }
 
 setItems(items){
 this.menuItems = items
 this.creatItem()
 }
}

推荐教程:js教程

热心网友 时间:2022-04-07 07:26

document.oncontextmenu = funciton(){
    // TODO
    return false;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 巴戟杜仲猪腰汤的做法与功效 杜仲猪腰汤的禁忌是什么? 腰子煮汤的做法,腰子煮汤怎么做好吃,腰子煮汤 猪腰汤的功效和制作方法是怎样的? 这样的猪腰汤有什么功效? 猪腰汤有什么功效 广州公积金提取是有限额吗? 广州公积金提取额度是多少 和面时水太热烫的面发不了了怎么办 和面水太烫了。这种情况没有办法,水温过高酵母失去活性。怎么处理? 为什么我的拼多多商品上传后点击拼单出现的界面跟别人不一样? 拼多多猫粮红包为什么和别人发的不一样?我的为啥还得复制粘贴别人那个直接点开就进入。 为什么拼多多一百块钱那个活动我的红包样子(就是点进去链接的样子)跟... 为什么我的拼多多跟别人的事不一样呢 微信基础小知识!修改头像、昵称和密码!快来扫个盲吧! 怎么修改,怎么修改微信密码 请问谁有 痴情总裁的替身新娘 的全文,请发给我,谢谢! 邮箱号:515454012@qq.com 能发分安知晓的总裁的替身新娘给我吗?拜托拜托 cctalk怎么开悬浮窗iPad 苹果手机录屏能打开悬浮窗吗 羊腰和腰子炖汤以后的功效还有多少 黄精猪腰汤有哪些功效? 腰子汤的做法大全 三子炖猪腰汤有哪些功效? 特色南瓜苗培育方案有哪些呢?你认为哪种比较好呢? 一节7号3.2V220毫安磷酸铁锂电池和两节7号1.5V干电池哪个更耐用? penonsing1.5伏7号电池可以充电吗? 充电电池5号和7号电压有1.5伏吗?为什么1.2伏 放电电压不够? 5号电池 和 7号电池都是1.5V吗 有没有1.5V的五号和七号的可充电锂电池? 为什么我国1号,2号,5号,7号干电池电压都是1.5V的 为何5、7号充电电池没有1.5V的? 7号锂电池1.5v和3.7v那种好 7号 可充电电池有1.5V的吗 微信聊天记录如何备份到电脑上 健斯卡顺丰包邮18腹肌贴健身器速成懒人瘦肚子收腹运动减肥神器可以减肥吗? 两台笔记本电脑如何用蓝牙共享文件 梦到过河.水是黑色的是什么意思 梦见从井里打上来得水是黑色得,是什么意思啊 怎么使用蓝牙与电脑传递文件?