JS自定義右鍵菜單實(shí)現(xiàn)代碼解析
今天來講一個(gè)關(guān)于右鍵菜單的小demo,拋磚引玉。
首先,我們要用css和html做一個(gè)自定義右鍵菜單。
<!--自定義右鍵菜單html代碼--> <div id="menu"> <div class="menu">功能1</div> <div class="menu">功能2</div> <div class="menu">功能3</div> <div class="menu">功能4</div> <div class="menu">功能5</div> </div>
/*css代碼*/ #menu{ width: 0; /*設(shè)置為0 隱藏自定義菜單*/ height: 125px; overflow: hidden; /*隱藏溢出的元素*/ box-shadow: 0 1px 1px #888,1px 0 1px #ccc; position: absolute; /*自定義菜單相對與body元素進(jìn)行定位*/ } .menu{ width: 130px; height: 25px; line-height: 25px; padding: 0 10px; }
現(xiàn)在我們已經(jīng)有了自定義菜單,還需要一個(gè)很重要的事件 contextmenu。
> contextmenu :當(dāng)你在頁面上右鍵點(diǎn)擊時(shí),會觸發(fā)此事件,并會跳出瀏覽器自帶的右鍵菜單。
所以,我們要做的就是,在觸發(fā)contextmenu事件時(shí),取消掉默認(rèn)行為(也就是阻止瀏覽器顯示自帶的菜單)
通過傳入的事件對象,來確定鼠標(biāo)的點(diǎn)擊位置,作為left和top的值來進(jìn)行元素的定位,并顯示自定義菜單
window.oncontextmenu=function(e){ //取消默認(rèn)的瀏覽器自帶右鍵 很重要??! e.preventDefault(); //獲取我們自定義的右鍵菜單 var menu=document.querySelector("#menu"); //根據(jù)事件對象中鼠標(biāo)點(diǎn)擊的位置,進(jìn)行定位 menu.style.left=e.clientX+'px'; menu.style.top=e.clientY+'px'; //改變自定義菜單的寬,讓它顯示出來 menu.style.width='125px'; } //關(guān)閉右鍵菜單,很簡單 window.onclick=function(e){ //用戶觸發(fā)click事件就可以關(guān)閉了,因?yàn)榻壎ㄔ趙indow上,按事件冒泡處理,不會影響菜單的功能 document.querySelector('#menu').style.height=0; }
這里只是一個(gè)很簡單的例子,contextmenu事件支持所有 HTML 元素,這意味者你可以給不同的元素,自定義不同的右鍵菜單,由于contextmenu事件會冒泡傳播,子節(jié)點(diǎn)上觸發(fā)的事件,在父節(jié)點(diǎn)上也會觸發(fā),所以應(yīng)該調(diào)用對應(yīng)的函數(shù)或者設(shè)置對應(yīng)的屬性值來阻止事件冒泡。
根據(jù)事件對象來定位其實(shí)很復(fù)雜也很簡單,除了clientY和clientX,鼠標(biāo)事件對象提供了一系列復(fù)雜的相關(guān)信息,諸如layerX,pageX等等,這些值并不直觀,還存在瀏覽器兼容問題,不過clientX和clientY,可以說是萬金油屬性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript 數(shù)組去重并統(tǒng)計(jì)重復(fù)元素出現(xiàn)的次數(shù)實(shí)例
下面小編就為大家分享一篇JavaScript 數(shù)組去重并統(tǒng)計(jì)重復(fù)元素出現(xiàn)的次數(shù)實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12JS實(shí)現(xiàn)鼠標(biāo)滑過顯示邊框的菜單效果
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)滑過顯示邊框的菜單效果,涉及javascript響應(yīng)鼠標(biāo)事件動態(tài)修改頁面元素的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09JavaScript設(shè)計(jì)模式之職責(zé)鏈模式應(yīng)用示例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之職責(zé)鏈模式,結(jié)合實(shí)例形式分析了javascript責(zé)任鏈模式的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08js獲取時(shí)間并實(shí)現(xiàn)字符串和時(shí)間戳之間的轉(zhuǎn)換
這篇文章主要介紹了js獲取時(shí)間并實(shí)現(xiàn)字符串和時(shí)間戳之間的轉(zhuǎn)換,需要的朋友可以參考下2015-01-01JavaScript新引入的原始數(shù)據(jù)類型Symbol詳解
Symbol是ES6中引入的一種新的基本數(shù)據(jù)類型,用于表示一個(gè)獨(dú)一無二的值。它是JavaScript中的第七種數(shù)據(jù)類型。本文將詳細(xì)講講Symbol的使用,需要的可以參考一下2023-01-01JS獲取整個(gè)頁面文檔的實(shí)現(xiàn)代碼
就是在當(dāng)前頁面用AJAX請求當(dāng)前頁面,返回的就是整個(gè)頁面的HTML··既然是整個(gè)頁面,所以也包括文檔聲明2011-12-12