最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生js自定義右鍵菜單

 更新時間:2021年09月08日 10:01:30   作者:紙 飛機  
這篇文章主要為大家詳細介紹了原生js自定義右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js自定義右鍵菜單的具體代碼,供大家參考,具體內(nèi)容如下

1、右鍵菜單觸發(fā)的基本過程

實現(xiàn)自定義右鍵菜單我們首先需要了解以下內(nèi)容:

瀏覽器默認的右鍵菜單觸發(fā)的基本過程

1)、單擊右鍵,菜單出現(xiàn)
2)、菜單出現(xiàn),鼠標箭頭一直在菜單左上角
3)、再換個位置點擊右鍵,原菜單消失,新菜單出現(xiàn)在指定位置
4)、點擊左鍵,中鍵,菜單消失

以上為大致實現(xiàn)過程,不全面,僅供參考

也許文字過于抽象,我們來看看代碼吧:

2、HTML結(jié)構(gòu)

<!--start右鍵菜單的結(jié)構(gòu)-->
<div id="rightmenu" class="rightmenu">
 <ul>
  <li disabled="disabled">
        <a href="#" >返回(B)</a> 
        <span>Alt+向左箭頭</span></li>
  <li><a href="#" >前進(F)</a> <span>Alt+向右箭頭</span></li>
  <li><a href="#" >重新加載(R)</a> <span>Ctrl+R</span></li>
 </ul>
 <ul>
  <li><a href="#" >另存為(A)...</a> <span>Ctrl+S</span></li>
        <li><a href="#" >打印(P)..</a> <span>Ctrl+P</span></li>
  <li><a href="#" >投射(C)...</a> <span>Ctrl+R</span></li>
 </ul>
 <ul>
  <li><a href="#" >查看你個錘代碼(V)</a> <span>Ctrl+U</span></li>
     <li><a href="#" >檢查你個瓜皮(N)</a> <span>Ctrl+Shift+L</span></li>
 </ul>
</div>
<!--end右鍵菜單的結(jié)構(gòu)-->
  
<div class="box"></div>

3、CSS樣式

*{
 margin: 0;
 padding: 0;
}
li{
 list-style: none;
}
.rightmenu{
 width: 250px;
 background: #fff;
 border: 1px solid #bababa;
 position: fixed;
 box-sizing: border-box;
 display: none;
}
.rightmenu ul{
 border-bottom: 1px solid #e9e9e9;   
}
.rightmenu ul li{
 height: 30px;
 line-height: 30px;
 color: #000;
 padding: 0 25px;
 box-sizing: border-box;
 margin: 2px 0;
     cursor: default;
}
.rightmenu ul li:hover{
 background: #ebebeb;
}
.rightmenu ul li a{
 font-size: 12px;
 color: #000;
 cursor: default;
 text-decoration: none;
}
.rightmenu ul li span{
 float: right;
 font-size: 12px;
 color: #000;
}
.box{
 width: 100px;
 height: 100px;
 background: red;
}

.rightmenu設(shè)置display:none是因為右鍵菜單本身是隱藏了因為點擊了才出現(xiàn),倘若不加這句,菜單會出現(xiàn)在頁面的左上角。

3、js實現(xiàn)過程

分析:

①:瀏覽器本身就有右鍵菜單,我們也要做右鍵菜單,所以應(yīng)當阻止瀏覽器的右鍵,這里可以用到preventDefault(),這個方法有著阻止默認事件的功能,科普一下,什么是默認事件:

例如: 點我可以知道這是可以跳轉(zhuǎn)到百度的,所以是有個跳轉(zhuǎn)時間的,這個事件我們沒有去用js實現(xiàn),他是默認的,所以稱之為默認事件,同理,瀏覽器右鍵菜單。

②前面我們說了菜單出現(xiàn),鼠標箭頭一直在菜單左上角,這是怎么實現(xiàn)的呢,這涉及到event里面的事件發(fā)生坐標了,我們點擊的位置就是我們右鍵點擊事件發(fā)生的位置,可以用坐標來解釋這個位置,clientX(事件發(fā)生點和可視區(qū)域的位置),offsetX(事件發(fā)生點和父級元素的位置),pageX(事件發(fā)生點和頁面的位置),screenX(事件發(fā)生點和屏幕的位置),這里我們用offsetX/Y,因為我們是在BOW中點擊,所以具體原因大家百度一下就直道了,我們還是看代碼吧,代碼里標注的很詳細。

<script>
 document.addEventListener('DOMContentLoaded',function(){
 //獲取
 var rightMenu=document.getElementById('rightmenu');
 //1.首先將右鍵默認行為關(guān)閉
 window.oncontextmenu=function(event){
  event.preventDefault();
  //2.設(shè)置右鍵行為
  rightMenu.style.display="none";//重置已經(jīng)block的菜單
  rightMenu.style.display="block";
  rightMenu.style.left=event.offsetX+'px';
   rightMenu.style.top=event.offsetY+'px';
  }
  //3.根據(jù)真實瀏覽器的右鍵來看左鍵是可以取消右鍵菜單的
  document.onclick=function(event){
   rightMenu.style.display="none";
  }
  //4.功能并不完善,需要給每個li寫B(tài)OM事件,這里暫時不寫了
  //5.仔細檢查你會發(fā)現(xiàn)當右鍵在自己定義的右鍵菜單上時,會出現(xiàn)一點小情況,可以自己測試
    })
</script>

以上僅供參考,更多的功能實現(xiàn)都是差不多的原理,好了,結(jié)束了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在多個頁面使用同一個HTML片段《續(xù)》

    在多個頁面使用同一個HTML片段《續(xù)》

    上一篇文章中我們使用textarea來模擬AJAX的返回結(jié)果,造成了一些誤解。 這里我們首先用asp.net的Generic Handler做一個簡單的后臺來重現(xiàn)這個AJAX過程。
    2011-03-03
  • JavaScript 裝逼指南(js另類寫法)

    JavaScript 裝逼指南(js另類寫法)

    如何寫JavaScript才能逼格更高呢?怎樣才能、讓別人一眼看出你不簡單呢?是否很期待別人在看完你的代碼之后感嘆一句原來還可以這樣寫呢?下面列出一些在JavaScript時的裝逼技巧,也可說是非常實用的寫法
    2020-05-05
  • JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式

    JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式

    這篇文章主要給大家介紹了關(guān)于JavaScript如何將時間戳轉(zhuǎn)化為年月日時分秒格式的相關(guān)資料,在前端的日常工作當中,時間戳的使用也是不少的,有時后端返回給我們的數(shù)據(jù)是一個時間戳,我們需要轉(zhuǎn)換成年月日,時分秒的形式展示在頁面當中,需要的朋友可以參考下
    2023-11-11
  • JavaScript實現(xiàn)短信倒計時60s

    JavaScript實現(xiàn)短信倒計時60s

    本文給大家分享一段實例代碼給大家詳細介紹了JavaScript實現(xiàn)短信倒計時60s功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-10-10
  • TreeView 用法(有代碼)(asp.net)

    TreeView 用法(有代碼)(asp.net)

    TreeView 用法,后臺結(jié)合asp.net需要的朋友可以參考下。
    2011-07-07
  • 微信小程序開發(fā)之獲取用戶信息的兩種方法

    微信小程序開發(fā)之獲取用戶信息的兩種方法

    小程序可以通過微信官方提供的登錄方法方便地獲取微信提供的用戶身份標識,進而開發(fā)者可以進行下一步操作,下面這篇文章主要給大家介紹了關(guān)于微信小程序開發(fā)之獲取用戶信息的兩種方法,需要的朋友可以參考下
    2022-03-03
  • 使用flutter創(chuàng)建可移動的stack小部件功能

    使用flutter創(chuàng)建可移動的stack小部件功能

    本文主要介紹我為桌面和 Web 設(shè)計的一個超級秘密 Flutter 項目使用了畫布和可拖動節(jié)點界面。本教程將展示我如何使用堆棧來使用小部件完成可拖動功能,需要的朋友可以參考下
    2021-10-10
  • 用JS提交參數(shù)創(chuàng)建form表單在FireFox中遇到的問題

    用JS提交參數(shù)創(chuàng)建form表單在FireFox中遇到的問題

    在一個前端頁面上,需要通過JavaScript來提交參數(shù),使用JS創(chuàng)建form表單,將參數(shù)append到表單中進行提交,接下來將介紹如何操作與實現(xiàn)
    2013-01-01
  • 詳解CocosCreator中幾種計時器的使用方法

    詳解CocosCreator中幾種計時器的使用方法

    這篇文章主要介紹了CocosCreator中幾種計時器的使用方法,推薦使用schedule,功能多些,銷毀時還能自動移除
    2021-04-04
  • JavaScript實現(xiàn)table切換的插件封裝

    JavaScript實現(xiàn)table切換的插件封裝

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)table切換的插件封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

南阳市| 梅州市| 鄱阳县| 雷山县| 大悟县| 龙里县| 盐津县| 涿鹿县| 沈阳市| 道真| 龙泉市| 黄冈市| 平和县| 拉萨市| 鲜城| 东安县| 贵溪市| 岢岚县| 长春市| 深圳市| 全椒县| 天等县| 开化县| 烟台市| 大姚县| 城步| 绍兴县| 阳山县| 桦川县| 嵊泗县| 武宣县| 伊通| 石阡县| 太湖县| 保德县| 清流县| 高陵县| 即墨市| 蚌埠市| 攀枝花市| 胶州市|