原生js自定義右鍵菜單
本文實例為大傢分享瞭js自定義右鍵菜單的具體代碼,供大傢參考,具體內容如下
1、右鍵菜單觸發的基本過程
實現自定義右鍵菜單我們首先需要瞭解以下內容:
瀏覽器默認的右鍵菜單觸發的基本過程
1)、單擊右鍵,菜單出現
2)、菜單出現,鼠標箭頭一直在菜單左上角
3)、再換個位置點擊右鍵,原菜單消失,新菜單出現在指定位置
4)、點擊左鍵,中鍵,菜單消失
以上為大致實現過程,不全面,僅供參考
也許文字過於抽象,我們來看看代碼吧:
2、HTML結構
<!--start右鍵菜單的結構--> <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右鍵菜單的結構--> <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設置display:none是因為右鍵菜單本身是隱藏瞭因為點擊瞭才出現,倘若不加這句,菜單會出現在頁面的左上角。
3、js實現過程
分析:
①:瀏覽器本身就有右鍵菜單,我們也要做右鍵菜單,所以應當阻止瀏覽器的右鍵,這裡可以用到preventDefault(),這個方法有著阻止默認事件的功能,科普一下,什麼是默認事件:
例如: 點我可以知道這是可以跳轉到百度的,所以是有個跳轉時間的,這個事件我們沒有去用js實現,他是默認的,所以稱之為默認事件,同理,瀏覽器右鍵菜單。
②前面我們說瞭菜單出現,鼠標箭頭一直在菜單左上角,這是怎麼實現的呢,這涉及到event裡面的事件發生坐標瞭,我們點擊的位置就是我們右鍵點擊事件發生的位置,可以用坐標來解釋這個位置,clientX(事件發生點和可視區域的位置),offsetX(事件發生點和父級元素的位置),pageX(事件發生點和頁面的位置),screenX(事件發生點和屏幕的位置),這裡我們用offsetX/Y,因為我們是在BOW中點擊,所以具體原因大傢百度一下就直道瞭,我們還是看代碼吧,代碼裡標註的很詳細。
<script> document.addEventListener('DOMContentLoaded',function(){ //獲取 var rightMenu=document.getElementById('rightmenu'); //1.首先將右鍵默認行為關閉 window.oncontextmenu=function(event){ event.preventDefault(); //2.設置右鍵行為 rightMenu.style.display="none";//重置已經block的菜單 rightMenu.style.display="block"; rightMenu.style.left=event.offsetX+'px'; rightMenu.style.top=event.offsetY+'px'; } //3.根據真實瀏覽器的右鍵來看左鍵是可以取消右鍵菜單的 document.onclick=function(event){ rightMenu.style.display="none"; } //4.功能並不完善,需要給每個li寫BOM事件,這裡暫時不寫瞭 //5.仔細檢查你會發現當右鍵在自己定義的右鍵菜單上時,會出現一點小情況,可以自己測試 }) </script>
以上僅供參考,更多的功能實現都是差不多的原理,好瞭,結束瞭。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。