1. 程式人生 > >遮蔽瀏覽器右鍵選單功能,自定義右鍵選單(相容IE8)

遮蔽瀏覽器右鍵選單功能,自定義右鍵選單(相容IE8)

做了個自定義右鍵選單的功能,和獲取選中文字內容相關,一起記錄一下。

網上查閱嘗試了很多方式,選擇了一個較為簡潔的方式實現,程式碼很少,進行細節調整後發現存在IE8相容性問題,又查閱資料後進行了優化,目前可以完美相容IE8,但注意jQuery版本必須1.7+,我這裡用的1.8.3版本。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/jquery-1.8.3.js"
>
</script> <style type="text/css"> /*css程式碼*/ #menu{ width: 0; /*設定為0 隱藏自定義選單*/ overflow: hidden; /*隱藏溢位的元素*/ box-shadow: 0 1px 1px #888,1px 0 1px #ccc; position: absolute; /*自定義選單相對與body元素進行定位*/ background-color
: white
; }
.menu{ width: 130px; line-height: 25px; padding: 0 10px; }
</style> <script> var str = ""; $(function() { $(document).on('contextmenu', function
(e) {
str = window.getSelection?window.getSelection().toString():document.selection.createRange().text; if(str == ""){ return; } //獲取我們自定義的右鍵選單 var menu=document.querySelector("#menu"); //加上滾動條的高度 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; //根據事件物件中滑鼠點選的位置,進行定位 menu.style.left=e.clientX+'px'; menu.style.top=e.clientY+scrollTop+'px'; //改變自定義選單的寬,讓它顯示出來 menu.style.width='95px'; return false; }); }); //關閉右鍵選單,很簡單 document.onclick=function(e){ //使用者觸發click事件就可以關閉了,因為繫結在window上,按事件冒泡處理,不會影響選單的功能     document.querySelector('#menu').style.width=0; } $(document).ready(function(){ $('#searchQXJS').click(function(){ console.info('選中的文字為:' + str); }); });
</script> </head> <body> <div>所以,我們要做的就是,在觸發contextmenu事件時,取消掉預設行為(也就是阻止瀏覽器顯示自帶的選單) 通過傳入的事件物件,來確定滑鼠的點選位置,作為left和top的值來進行元素的定位,並顯示自定義選單</div> <!--自定義右鍵選單html程式碼--> <div id="menu"> <div class="menu" id="searchQXJS" style="cursor: pointer;">選中文字</div> </div> </body> </html>

這裡我對瀏覽器自帶右鍵選單的遮蔽是在選中了文字的情況下,沒有選中文字時右鍵不會出現自定義選單,而依舊是瀏覽器自帶右鍵功能。

$(document).on的事件定義方式是為了相容IE8,很多網上的document.oncontextmenu=function的事件在IE中會有相容性問題,無法進入事件,但也不報錯。包括對選中文字內容的獲取,三目運算的寫法也是為了解決相容性問題。

效果如下:
右鍵選單效果
獲取選中的文字內容