JS實(shí)現(xiàn)右鍵菜單

今天來(lái)講一個(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;      /*自定義菜單相對(duì)與body元素進(jìn)行定位*/
}
.menu{
    width: 130px;
    height: 25px;
    line-height: 25px;
    padding: 0 10px;
}

現(xiàn)在我們已經(jīng)有了自定義菜單硼一,還需要一個(gè)很重要的事件 contextmenu。

contextmenu :當(dāng)你在頁(yè)面上右鍵點(diǎn)擊時(shí)梦抢,會(huì)觸發(fā)此事件般贼,并會(huì)跳出瀏覽器自帶的右鍵菜單。

所以奥吩,我們要做的就是哼蛆,在觸發(fā)contextmenu事件時(shí),取消掉默認(rèn)行為(也就是阻止瀏覽器顯示自帶的菜單)
通過(guò)傳入的事件對(duì)象霞赫,來(lái)確定鼠標(biāo)的點(diǎn)擊位置腮介,作為left和top的值來(lái)進(jìn)行元素的定位,并顯示自定義菜單

window.oncontextmenu=function(e){
    //取消默認(rèn)的瀏覽器自帶右鍵 很重要6怂ァ萤厅!
    e.preventDefault();

    //獲取我們自定義的右鍵菜單
    var menu=document.querySelector("#menu");

    //根據(jù)事件對(duì)象中鼠標(biāo)點(diǎn)擊的位置,進(jìn)行定位
    menu.style.left=e.clientX+'px';
    menu.style.top=e.clientY+'px';

    //改變自定義菜單的高寬靴迫,讓它顯示出來(lái)
    menu.style.height='125px';
}
//關(guān)閉右鍵菜單,很簡(jiǎn)單
window.onclick=function(e){

  //用戶觸發(fā)click事件就可以關(guān)閉了楼誓,因?yàn)榻壎ㄔ趙indow上玉锌,按事件冒泡處理,不會(huì)影響菜單的功能
    document.querySelector('#menu').style.height=0;
}

這里只是一個(gè)很簡(jiǎn)單的例子疟羹,contextmenu事件支持所有 HTML 元素主守,這意味者你可以給不同的元素,自定義不同的右鍵菜單榄融,由于contextmenu事件會(huì)冒泡傳播参淫,子節(jié)點(diǎn)上觸發(fā)的事件,在父節(jié)點(diǎn)上也會(huì)觸發(fā)愧杯,所以應(yīng)該調(diào)用對(duì)應(yīng)的函數(shù)或者設(shè)置對(duì)應(yīng)的屬性值來(lái)阻止事件冒泡涎才。
根據(jù)事件對(duì)象來(lái)定位其實(shí)很復(fù)雜也很簡(jiǎn)單,除了clientY和clientX力九,鼠標(biāo)事件對(duì)象提供了一系列復(fù)雜的相關(guān)信息耍铜,諸如layerX,pageX等等,這些值并不直觀跌前,還存在瀏覽器兼容問(wèn)題棕兼,不過(guò)clientX和clientY,可以說(shuō)是萬(wàn)金油屬性抵乓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伴挚,一起剝皮案震驚了整個(gè)濱河市靶衍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茎芋,老刑警劉巖颅眶,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異败徊,居然都是意外死亡帚呼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門皱蹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)煤杀,“玉大人,你說(shuō)我怎么就攤上這事沪哺∩蜃裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵辜妓,是天一觀的道長(zhǎng)枯途。 經(jīng)常有香客問(wèn)我,道長(zhǎng)籍滴,這世上最難降的妖魔是什么酪夷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮孽惰,結(jié)果婚禮上晚岭,老公的妹妹穿的比我還像新娘。我一直安慰自己勋功,他們只是感情好坦报,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著狂鞋,像睡著了一般片择。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骚揍,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天字管,我揣著相機(jī)與錄音,去河邊找鬼信不。 笑死纤掸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浑塞。 我是一名探鬼主播借跪,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酌壕!你這毒婦竟也來(lái)了掏愁?” 一聲冷哼從身側(cè)響起歇由,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎果港,沒(méi)想到半個(gè)月后沦泌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辛掠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年谢谦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝衩。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡回挽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猩谊,到底是詐尸還是另有隱情千劈,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布牌捷,位于F島的核電站墙牌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏暗甥。R本人自食惡果不足惜喜滨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撤防。 院中可真熱鬧虽风,春花似錦、人聲如沸即碗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剥懒。三九已至,卻和暖如春合敦,著一層夾襖步出監(jiān)牢的瞬間初橘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工充岛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留保檐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓崔梗,卻偏偏與公主長(zhǎng)得像夜只,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒜魄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 13.1 事件流 “DOM2級(jí)事件”規(guī)定事件流包括3個(gè)階段:事件捕獲階段,處于目標(biāo)階段旅挤,事件冒泡階段踢关。事件捕獲表示...
    Elevens_regret閱讀 430評(píng)論 0 0
  • 事件流 IE和Netscape開(kāi)發(fā)團(tuán)隊(duì)提出了完全相反的兩種事件流的概念,事件冒泡流和事件捕獲流粘茄。 事件冒泡 事件由...
    exialym閱讀 938評(píng)論 0 9
  • 一签舞、DOM 什么是DOM?Document Object Model(文檔對(duì)象模型)柒瓣。DOM是針對(duì)HTML和XML...
    空谷悠閱讀 974評(píng)論 0 2
  • 效果預(yù)覽源碼地址 一儒搭、事件流 1、冒泡 什么是事件冒泡官方的定義就是從最特定的事件目標(biāo)到最不特定的事件目標(biāo)嘹朗。意思就...
  • 親愛(ài)的西瓜师妙,好久沒(méi)寫(xiě)日記∫倥啵考完試第二天我就去露營(yíng)了默穴,一場(chǎng)好幸苦的旅途,收獲好多褪秀。當(dāng)然我終于有機(jī)會(huì)長(zhǎng)時(shí)間說(shuō)英語(yǔ)了蓄诽。我...
    我們小區(qū)的不磨牙口水大王閱讀 302評(píng)論 0 0