Heim > Web-Frontend > js-Tutorial > Hauptteil

Verwenden Sie js, um ein benutzerdefiniertes Rechtsklick-Menü-Plug-in zu implementieren

王林
Freigeben: 2020-04-18 09:17:05
nach vorne
2367 Leute haben es durchsucht

Verwenden Sie js, um ein benutzerdefiniertes Rechtsklick-Menü-Plug-in zu implementieren

1. So verwenden Sie

Einführung in die js-Datei<script src="RightMenu.js"></script>

Initialisierung:

let rightMenu = new RightMenu({
   targetId:&#39;menu&#39;,//需要改变右键菜单的元素id
   menuItems: items//菜单项数据,json数组
   })
Nach dem Login kopieren

2. menuItems-Parameter

items = [
 {
 id: &#39;aa&#39;,//菜单id
 text: &#39;ccc&#39;,//菜单文字,可以是html元素
 show: true, //菜单是否显示
 active: false,//菜单是否可用
 style: &#39;item-unactive&#39;
 }
]
Nach dem Login kopieren

3. Methode

setItems(menuItems) legt das Menü fest. Dynamisches Einstellungsmenü

hide() Menü ausblenden

on(eventType, event) Ereignisüberwachung

4. ElementKlicken Sie auf den Menüpunkt, Rückruffunktion Die Parameter sind alle Attribute des Menüpunkts

Beispiel:

rightMenu.on(&#39;itemClick&#39;,(param) => {
 console.log(param)
 if(param.active === false){
 return
 }
 alert(JSON.stringify(param))
 // rightMenu.hide()
})
Nach dem Login kopieren

createBefore wird aufgerufen, bevor der Menüinhalt generiert wird, wodurch dynamische Menüeinstellungen realisiert werden können

Beispiel:

rightMenu.on(&#39;createBefore&#39;,(param) => {
 rightMenu.setItems(items1)
})
Nach dem Login kopieren

Hinweis: Die Kaskadierungsfunktion wird noch nicht unterstützt

Code:

class RightMenu{
 constructor(param){
 this.targetId = param.targetId
 this.ele = document.querySelector(&#39;#&#39; + this.targetId)
 console.assert(this.ele != null, &#39;未找到id=&#39; + this.targetId + &#39;的元素&#39;)
 this.menu = null
 this.menuItems = param.menuItems
 this._menuItems = {}
 this.itemDefaultClass = &#39;item-default&#39;
 this.event = {
 itemClick: null,
 createBefore: null
 }
 this.flag = true
 this.init()
 }
 
 init(){
 let that = this
 that.createMenu()
 this.ele.oncontextmenu = function(ee) {
 let e = ee || window.event;
 //鼠标点的坐标
 let oX = e.clientX;
 let oY = e.clientY;
 //菜单出现后的位置
 that.menu.style.display = "block";
 that.menu.style.left = oX + "px";
 that.menu.style.top = oY + "px";
 that.createMenu()
 //阻止浏览器默认事件
 return false;//一般点击右键会出现浏览器默认的右键菜单,写了这句代码就可以阻止该默认事件。
 }
 document.oncontextmenu = function(ee){
 let e = ee || window.event;
 if(e.target.id !== that.targetId && e.target.dataset.type != &#39;item&#39;){
 that.menu.style.display = "none"
 }
 }
 document.onclick = function(ee) {
 let e = ee || window.event;
 that.menu.style.display = "none"
 }
 that.menu.onclick = function(ee) {
 let e = ee || window.event;
 if(e.target.dataset.type == &#39;item&#39;){
 if(that.event.itemClick instanceof Function){
  that.event.itemClick(that._menuItems[e.target.id])
 }
 }
 e.cancelBubble = true;
 }
 this.menu.onmouseover = function(ee){
 that.flag = true
 }
 this.menu.onmouseleave = function(ee){
 that.flag = false
 }
 }
 createMenu(){
 if(this.menu == null){
 this.menu = document.createElement(&#39;div&#39;)
 this.menu.className = &#39;menu-default&#39;
 document.body.appendChild(this.menu)
 }
 
 let mark = true
 if(this.event.createBefore instanceof Function){
 mark = this.event.createBefore()
 }
 if(mark){
 this.creatItem()
 }
 }
 _bindOncontextmenu(obj){
 obj.oncontextmenu = function(ee){
 ee.target.click()
 return false
 }
 }
 creatItem(){
 if(this.menuItems.length == 0){
 return
 }
 let fragement = document.createDocumentFragment()
 let temp = null
 let tempItem = null
 for (let i = 0, len = this.menuItems.length; i < len; i++){
 tempItem = this.menuItems[i]
 if(tempItem.show === false){
 continue
 }
 temp = document.createElement(&#39;div&#39;)
 temp.id = tempItem.id
 temp.innerHTML = tempItem.text
 temp.className = tempItem.style || &#39;item-default&#39;
 temp.dataset.type = &#39;item&#39;
 
 this._menuItems[tempItem.id] = tempItem
 fragement.appendChild(temp)
 this._bindOncontextmenu(temp)
 }
 this.menu.innerHTML = &#39;&#39;
 this.menu.appendChild(fragement)
 }
 
 on(type,event){
 this.event[type] = event
 }
 
 hide(){
 this.menu.style.display = &#39;none&#39;
 }
 
 setItems(items){
 this.menuItems = items
 this.creatItem()
 }
}
Nach dem Login kopieren

Empfohlenes Tutorial:

js-Tutorial

Das obige ist der detaillierte Inhalt vonVerwenden Sie js, um ein benutzerdefiniertes Rechtsklick-Menü-Plug-in zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!