热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【用JS自制表格软件玩数据】8.设计单元格中的右键菜单

右键菜单选项的设计效果图基本数据分析功能菜单的渲染模块右键菜单的样式最终结果当写完本系列后,我会把源代码分享出来给大家。本课程也会持续更新与矫正。欢迎留言指正


右键菜单选项的设计

  • 效果图
  • 基本数据
    • 分析
  • 功能
  • 菜单的渲染模块
  • 右键菜单的样式
  • 最终结果


当写完本系列后,我会把源代码分享出来给大家。本课程也会持续更新与矫正。欢迎留言指正!



效果图

在这里插入图片描述


基本数据

首先构建一个基本的配置数据

/**
* @property {Array} contextmenulist 右键菜单列表*/

this.contextmenulist &#61; [{"icon": "","name": "复制","event": function () { }},{"icon": "","name": "剪切","event": function () { }},{"icon": "","name": "粘贴","event": function () { }},{"icon": "","name": "清空全部格式","event": function () {var cells__inputs &#61; document.getElementsByClassName("cells__input");var length &#61; cells__inputs.length;for(var i &#61; 0;i<length;i&#43;&#43;){cells__inputs[i].setAttribute("style","");}}}
];

分析


属性说明
icon图标
name按钮的文字
event点击该按钮后会执行的代码

功能

cellcontextmenu(ev){var that &#61; this// 一个复制对象的函数function copy (array) {let newArray &#61; []for(let item of array) {newArray.push(item);}return newArray;}var target &#61; ev.target || ev.srcElement;// 将前面的菜单配置文件复制一个副本出来var contextmenulist &#61; copy(that.contextmenulist);// 这个地方是将菜单项的列表渲染出来&#xff0c;具体的代码可以看下面的代码块that.updata_contextmenulist(contextmenulist,that.right__menu_list)console.log("单元格右击",target.getAttribute("data-x"),target.getAttribute("data-y"))// 前面渲染成功后的菜单是透明不可见的&#xff0c;下面的代码要把渲染的菜单&#xff0c;显示出来var oDiv &#61; document.getElementById(that.right__menu);oDiv.style.display &#61; "block";oDiv.style.left &#61; ev.clientX&#43;"px";oDiv.style.top &#61; ev.clientY&#43;"px";that.focus["x"] &#61; target.getAttribute("data-x");that.focus["y"] &#61; target.getAttribute("data-y");console.log(that.focus);}

菜单的渲染模块

updata_contextmenulist(contextmenulist,id){ // 鼠标右键菜单刷新this.empty_id(id)var len &#61; contextmenulist.length;var Tags &#61; [];for(var i &#61; 0; i < len; i&#43;&#43; ){// right__menu__element 是菜单的样式Tags.push({"Tag" : "li", "ID" : this.creatGlobalId(), "ClassName" : "right__menu__element", "Text":contextmenulist[i]["name"],"Data" : [{ "k":"id", "v":i }],"Action":{"click":function(ev){var target &#61; ev.target || ev.srcElement;console.log("右键菜单按钮"&#43;target.getAttribute("data-id")&#43;"点击事件");contextmenulist[target.getAttribute("data-id")]["event"]();}}});}this.renderDOM(id,Tags,function(target){},function(target){});}

右键菜单的样式

.right__menu{position: absolute;background: #fff;border: 1px solid black;display: none;
}.right__menu__element{list-style-type: none;margin: 10px;text-align: left;cursor:default;
}

最终结果


这个右键菜单会跟着鼠标的位置一起展示&#xff0c;如果点击其他位置&#xff0c;它就会消失。这里面用到了事件的冒泡机制。我后面会在更深一步介绍渲染器的代码里详细介绍到。


在这里插入图片描述

在这里插入图片描述


推荐阅读
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
author-avatar
林原伟662532
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有