首页 > 编程语言 >javascript右键菜单

javascript右键菜单

时间:2024-05-29 16:32:44浏览次数:26  
标签:function 菜单 const menu javascript li menus 右键 custom

 

 

文章来源:https://segmentfault.com/a/1190000023098787

 

HTML

<h1>Click on blank to show custom context menus</h1>

CSS

.custom-context-menu {
  position: fixed;
  border: 1px solid #ccc;
  list-style: none;
  padding: 4px 0;
  border-radius: 4px;
  box-shadow: 0px 2px 6px 2px #ddd;

  &.hidden {
    display: none;
  }

  li {
    padding: 8px 12px;
    border-bottom: 1px solid #f0f2f5;
    user-select: none;
    transition: all 0.1s;

    &:last-child {
      border-bottom: none;
    }

    &:hover {
      cursor: pointer;
      background-color: #0170fe;
      color: #fff;
    }

    &:active {
      background-color: #f0f2f7;
    }
  }
}

JS

/**
 * options:
 * {
 *  menus:[{
 *    name: string,
 *    onClick: Function
 *  }],
 * }
 */
const ContextMenu = function (options) {
  let instance;

  function createMenu() {
    const ul = document.createElement("ul");
    ul.classList.add("custom-context-menu");
    const { menus } = options;
    if (menus && menus.length > 0) {
      for (let menu of menus) {
        const li = document.createElement("li");
        li.textContent = menu.name;
        li.onclick = menu.onClick;
        ul.appendChild(li);
      }
    }
    const body = document.querySelector("body");
    body.appendChild(ul);
    return ul;
  }

  return {
    getInstance: function () {
      if (!instance) {
        instance = createMenu();
      }
      return instance;
    },
  };
};

const contextMenu = ContextMenu({
  menus: [
    {
      name: "custom menu 1",
      onClick: function (e) {
        console.log("menu1 clicked");
      },
    },
    {
      name: "custom menu 2",
      onClick: function (e) {
        console.log("menu2 clicked");
      },
    },
    {
      name: "custom menu 3",
      onClick: function (e) {
        console.log("menu3 clicked");
      },
    },
  ],
});

function showMenu(e) {
  e.preventDefault();
  const menus = contextMenu.getInstance();
  menus.style.top = `${e.clientY}px`;
  menus.style.left = `${e.clientX}px`;
  menus.classList.remove("hidden");
}

function hideMenu(event) {
  const menus = contextMenu.getInstance();
  menus.classList.add("hidden");
}

document.addEventListener("contextmenu", showMenu);
document.addEventListener("click", hideMenu);

 

 

链接:https://codepen.io/mudontire/pen/ZEQvRNX

 

标签:function,菜单,const,menu,javascript,li,menus,右键,custom
From: https://www.cnblogs.com/hechunfeng/p/18220586

相关文章

  • JavaScript基础ECMAScript知识点复习整理
    **本篇文章食用的简单说明**本篇文章为复习JavaScript基础ECMAScript进行了知识点梳理,加粗部分为重点!!!加粗加红为重重点!!!由于JavaScript内容比较多,本篇文章只是基础部分,WebAPIs(DOM和BOM)等知识在后续过程中会继续更新,欢迎小伙伴在评论区补充~推荐大家按记忆梳理部分的内容自......
  • JavaScript中的let关键字详解
    在JavaScript中,let关键字用于声明局部变量,它与传统的var关键字类似,但引入了几个关键的区别和改进,主要体现在作用域规则、重复声明限制以及引入了“暂时性死区”等概念。下面将详细介绍let的特点及其与var的不同之处。块级作用域vs函数作用域var声明的变量:其作用域是函数......
  • 将sublime text 3加入到windows右键功能中
    1.reg文件内容,编辑好之后,双击1.reg文件即可WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\*\shell\SublimeText3]@="EditwithSublimeText3""Icon"="D:\\software\\sublime_text_build_4169_x64\\sublime_text.exe,0"[HKEY_CLASS......
  • JavaScript日期与时间处理的艺术
    JavaScript日期与时间处理的艺术基础概念:JavaScript中的日期对象诞生时刻时间戳:纪元的秘密案例一:格式化日期的艺术美化你的日期自定义格式化案例二:跨时区的舞蹈时区转换案例三:时间旅行的挑战闰年与月份天数避免日期计算的陷阱实战技巧与避坑指南性能优化安全性考量问......
  • JavaScript 中的 Range 和 Selection 对象
    JavaScript中的Range和Selection对象前言最近在做鼠标框选的需求,鼠标框选就需要用到Range和Selection对象。Range表示选择的区间范围,Selection表示选择的文档内容。下面就详细说下这两个对象一、RangeRange接口表示一个包含节点与文本节点的一部分的文档片段。......
  • 前端历程(包括html,JavaScript,jQuery,bootstrap)
    前端学习历程jQuery"""jQuery内部封装了原生的js代码(还额外添加了很多功能)能够让你通过书写更少的代码完成js操作类似于python里面的模块在前端模块不叫模块叫"类库"兼容多个浏览器的你在使用jQuery的时候就不需要考虑浏览器兼容问题jQuery的宗旨 writelessdom......
  • 实现树形菜单
    在Android中创建树形菜单(TreeView)有几种方法,可以根据你的需求选择合适的方式。这种结构通常用于展示层级关系的数据。一个常见的实现方式是使用`RecyclerView`配合自定义的适配器来创建树形菜单。以下是一个简单的示例,展示如何在Android中创建树形菜单,并点击每个分类可以......
  • 《你不知道的JavaScript》三卷读后感
    《你不知道的JavaScript》三卷读后感 本系列的作者是Kyle Simpson,上卷译者赵望野、梁杰,中卷译者单业,下卷译者单业、姜南。我个人觉得第一卷是本系列最好的(必读),而第二卷虽然也讲解了很多知识点,但是对于异步和性能的那部分提及了信任问题上,我不敢苟同,毕竟开源的大......
  • ⭐⭐⭐⭐⭐《JavaScript忍者秘籍》关键技术分享
    链接:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxg基础语法与数据类型:介绍JavaScript的基本语法结构,包括变量、数据类型、运算符、条件语句、循环等。函数与高阶函数:深入讲解函数的定义、调用以及高阶函数的概念,如回调函数、闭包等。对象与原型链:解析JavaScri......
  • 持续性学习-Day16(前端基础JavaScript)
    LearnJavaScript参考教学视频:秦疆参考知识UI框架Ant-design:阿里巴巴出品,基于React的UI框架ElementUI、iview、ice:饿了吗出品,基于VUE的UI框架BootStrap:Twitter推出的一个用于前端开发的开源工具包AmazeUI:一款HTML5跨屏前端框架JavaScript构建工具Babel:JS编译......