Maison > interface Web > js tutoriel > Utilisez js pour implémenter un plug-in de menu contextuel personnalisé

Utilisez js pour implémenter un plug-in de menu contextuel personnalisé

王林
Libérer: 2020-04-18 09:17:05
avant
2410 Les gens l'ont consulté

Utilisez js pour implémenter un plug-in de menu contextuel personnalisé

1. Comment utiliser

introduction du fichier js<script src="RightMenu.js"></script>

Initialisation :

let rightMenu = new RightMenu({
   targetId:&#39;menu&#39;,//需要改变右键菜单的元素id
   menuItems: items//菜单项数据,json数组
   })
Copier après la connexion

paramètres menuItems<🎜. >

items = [
 {
 id: &#39;aa&#39;,//菜单id
 text: &#39;ccc&#39;,//菜单文字,可以是html元素
 show: true, //菜单是否显示
 active: false,//菜单是否可用
 style: &#39;item-unactive&#39;
 }
]
Copier après la connexion

3. Méthode

setItems(menuItems) définit le menu. Menu des paramètres dynamiques

hide() Masquer le menu

on(eventType, event) Écoute de l'événement

4. Événement

itemClick clic sur l'élément de menu, fonction de rappel. Les paramètres sont tous des attributs de l'élément de menu

Exemple :

rightMenu.on(&#39;itemClick&#39;,(param) => {
 console.log(param)
 if(param.active === false){
 return
 }
 alert(JSON.stringify(param))
 // rightMenu.hide()
})
Copier après la connexion

createBefore est appelé avant que le contenu du menu ne soit généré, ce qui peut réaliser des paramètres de menu dynamiques

Exemple :

rightMenu.on(&#39;createBefore&#39;,(param) => {
 rightMenu.setItems(items1)
})
Copier après la connexion

Remarque : La fonction cascade n'est pas encore supportée

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()
 }
}
Copier après la connexion
Tutoriel recommandé :

tutoriel js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal