javascript實(shí)現(xiàn)在某個(gè)元素上阻止鼠標(biāo)右鍵事件的方法和實(shí)例
最近在做一個(gè)小東西的時(shí)候需要在某一個(gè)元素上“右擊”觸發(fā)一個(gè)自定義菜單,通過(guò)自定義的菜單對(duì)右擊的條目進(jìn)行編輯。這就要求屏蔽默認(rèn)的右鍵菜單
IE和FF下面的元素都有oncontextmenu這個(gè)方法,在FF下面只要通過(guò)event.preventDefault()方法就可以輕松實(shí)現(xiàn)這個(gè)效果。IE并不支持這個(gè)方法,在IE下面一般是通過(guò)觸發(fā)方法后return false來(lái)實(shí)現(xiàn)阻止默認(rèn)事件的。
通常我們使用阻止右鍵事件是在全局阻止,即在document層面就將右鍵攔截,現(xiàn)在我想要實(shí)現(xiàn)的效果是只在特定的區(qū)域阻止默認(rèn)的右鍵事件,而其他區(qū)域并不影響。
通過(guò)實(shí)驗(yàn)我發(fā)現(xiàn)要是在IE下綁定的方法中return false后在document層面上可以實(shí)現(xiàn)阻止右鍵的默認(rèn)行為。但是具體到某一個(gè)元素比如div,則失效。
最后通過(guò)查找手冊(cè)發(fā)現(xiàn),IE下的event對(duì)象有一個(gè)returnValue屬性,如果將這個(gè)屬性設(shè)置為false則不會(huì)觸發(fā)默認(rèn)的右鍵事件。類似如下:
event.returnValue = false;
只要加入這句就實(shí)現(xiàn)了我想要的效果。完整Demo代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>在某個(gè)元素上阻止鼠標(biāo)右鍵默認(rèn)事件DEMO</title>
<style>
body{font-size:12px; line-height:24px; font-family:Arial, Helvetica, sans-serif;}
#activeArea{width:300px;height:200px; background:#06C; color:#fff;}
#cstCM{ width:120px; background:#eee; border:1px solid #ccc; position:absolute; }
#cstCM ul{margin:0; padding:0;}
#cstCM ul li{ list-style:none;padding:0 10px; cursor:default;}
#cstCM ul li:hover{ background:#009; color:#fff;}
.splitTop{ border-bottom:1px solid #ccc;}
.splitBottom{border-top:1px solid #fff;}
</style>
<script>
function customContextMenu(event){
event.preventDefault ? event.preventDefault():(event.returnValue = false);
var cstCM = document.getElementById('cstCM');
cstCM.style.left = event.clientX + 'px';
cstCM.style.top = event.clientY + 'px';
cstCM.style.display = 'block';
document.onmousedown = clearCustomCM;
}
function clearCustomCM(){
document.getElementById('cstCM').style.display = 'none';
document.onmousedown = null;
}
</script>
</head>
<body>
<div id="cstCM" style="display:none;">
<ul>
<li>View</li>
<li>Sort By</li>
<li class="splitTop">Refresh</li>
<li class="splitBottom">Paste</li>
<li class="splitTop">Paste Shortcut</li>
<li class="splitBottom">Property</li>
</ul>
</div>
<div id="activeArea" oncontextmenu = "customContextMenu(event)">
Custom Context Menu Area
</div>
</body>
</html>
這個(gè)效果兼容IE6+,F(xiàn)F,但是opera壓根就沒(méi)有oncontextmenu這個(gè)方法所以也就不能簡(jiǎn)單的通過(guò)這個(gè)方法實(shí)現(xiàn),要想實(shí)現(xiàn)還需要通過(guò)其他的手段。
- JavaScript模擬鼠標(biāo)右鍵菜單效果
- javascript鼠標(biāo)右鍵菜單自定義效果
- 兩種JS實(shí)現(xiàn)屏蔽鼠標(biāo)右鍵的方法
- Javascript實(shí)現(xiàn)鼠標(biāo)右鍵特色菜單
- js實(shí)現(xiàn)完全自定義可帶多級(jí)目錄的網(wǎng)頁(yè)鼠標(biāo)右鍵菜單方法
- js判斷鼠標(biāo)左、中、右鍵哪個(gè)被點(diǎn)擊的方法
- JS 獲取鼠標(biāo)左右鍵的鍵值方法
- js自定義鼠標(biāo)右鍵的實(shí)現(xiàn)原理及源碼
- JavaScript鼠標(biāo)事件,點(diǎn)擊鼠標(biāo)右鍵,彈出div的簡(jiǎn)單實(shí)例
相關(guān)文章
javascript實(shí)現(xiàn)智能手環(huán)時(shí)間顯示
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)智能手環(huán)時(shí)間顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
JS解決回調(diào)地獄為什么需要Promise來(lái)優(yōu)化異步編程
這篇文章主要為大家介紹了JS解決回調(diào)地獄為什么需要Promise來(lái)優(yōu)化異步編程原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼
javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼,需要的朋友可以參考下。2010-12-12
JS監(jiān)聽(tīng)組合按鍵思路及實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了JS監(jiān)聽(tīng)組合按鍵思路及實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
ExtJS實(shí)現(xiàn)文件下載的方法實(shí)例
這篇文章介紹了ExtJS實(shí)現(xiàn)文件下載的方法實(shí)例,有需要的朋友可以參考一下2013-11-11
js定時(shí)調(diào)用方法成功后并停止調(diào)用示例
這篇文章主要介紹了js定時(shí)調(diào)用方法成功后并停止調(diào)用的實(shí)現(xiàn),需要的朋友可以參考下2014-04-04

