右击菜单简单实现

前几天项目验收的时候,提出“右击菜单”的需求。那么右击菜单有什么优点呢?为什么要做成这样?我想用一句:“提高用户体验度”就能够解除大家的疑惑吧。这样用户就能够依据自己的喜好,是点击固定button还是右击,无论通过那个渠道都能够达到目的,这样才干得到用户的青睐。

那么接下来就让我先从一个小的demo入手,体验一把吧!

一、准备工作

  想要做的效果:

二、HTML代码

<span style="font-size:18px;"><!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>右击菜单体验</title>
//<linkrel="stylesheet" type="text/css"href="rightKeyMenu.css" />
<scripttype="text/javascript"src="rightKeyMenu.js"></script>
<styletype="text/css">
*{font-size:12px;}
</style>
<scriptlanguage="javascript">
functionaddRightKeyMenuItem(id){
varrightMenu = new RightKeyMenu.Menu();
rightMenu.setMenu(id,‘menuDiv‘);

rightMenu.addMenuItems({
menuItemId:‘menu1‘,
menuItmeImgSrc:‘tests.png‘,
menuItemText:‘加入(我能够点)‘
},{
setOnClick:"menuClick(‘您在"+id+" 上点击了加入‘)"
});

rightMenu.addMenuItems({
menuItemId:‘menu2‘,
menuItmeImgSrc:‘tests.png‘,
menuItemText:‘改动(我也能够点)‘,
menuSplit:true
},{
setOnClick:"menuClick(‘您在"+id+" 上点击了改动‘)"
});

rightMenu.addMenuItems({
menuItemId:‘menu3‘,
menuItmeImgSrc:‘tests.png‘,
menuItemText:‘删除(我还能够点)‘
},{
setOnClick:"menuClick(‘您在"+id+" 上点击了删除‘)"
});

returnrightMenu.show();
}

functionmenuClick(text){
alert(text);
}
</script>
</head>

<bodyonclick="RightKeyMenu.hidden();" style="border:1px solid#000;width:800px;height:500px;">
<divclass="menu" id="menuDiv"></div>

<tablebordercolor="#CCCCCC" border="1" cellSpacing="0"cellPadding="0"style="width:200px;border-collapse:collapse;margin:0auto;margin-top:5px;">
<tr id="one" style="height:30px; cursor:default;" onmouseover="javascript:this.style.backgroundColor =‘#E8F3FD‘" onmouseout="javascript:this.style.backgroundColor =‘#fff‘" oncontextmenu="return addRightKeyMenuItem(‘用户信息一‘);">
           <tdalign="center">用户信息一(在这点右键试试)</td>
    </tr>
<tr id="two" style="height:30px; cursor:default;" onmouseover="javascript:this.style.backgroundColor =‘#E8F3FD‘" onmouseout="javascript:this.style.backgroundColor =‘#fff‘" oncontextmenu="return addRightKeyMenuItem(‘用户信息二‘);">
           <tdalign="center">用户信息二(在这点右键试试)</td>
    </tr>
</table>
<br/><br/><br/><br/><br/>
<divstyle="width:800px; text-align:center;">框内为Body区域---点击此区域右键菜单消失!

成为网页的右击菜单!</div>
</body>
</html></span>

三、JS代码

<span style="font-size:18px;">var ie =(navigator.appVersion.indexOf("MSIE")!=-1);//IE
var ff =(navigator.userAgent.indexOf("Firefox")!=-1);//Firefox
var RightKeyMenu = {
/** 初始化菜单对象**/
menuObj: null,
/*
 * 创建右键菜单
 */
Menu: function(){
/** 初始化菜单项**/
this.menuItemsHTML= "";
/** 当前菜单项**/
this.menuItemsIndex= 0;
/** 初始化菜单**/
this.menuHTML= "";
/** 菜单ID **/
this.menuId= "";

this.setMenu= function(menuId,menuDiv){
this.menuId= menuId;
RightKeyMenu.menuObj= document.getElementById(menuDiv);
};
/** 往右键菜单中加入项 **/
this.addMenuItems= function(paramsObj,eventObj){
if(paramsObj!= null && paramsObj != ""){
varid = "";
varimg = "";
vartext = "";
varsetOnclick = "";
if(eventObj!= null && eventObj != "" && eventObj.setOnClick !=null && eventObj.setOnClick != ""){
setOnclick= eventObj.setOnClick;
}
if(paramsObj.menuItemId!= null && paramsObj.menuItemId != "")
id= paramsObj.menuItemId;

if(paramsObj.menuItmeImgSrc!= null && paramsObj.menuItmeImgSrc != "")
img= ‘<td style="width:21px;" align="center"><imgsrc="‘+paramsObj.menuItmeImgSrc+‘"/></td>‘;
else
img= ‘<td style="width:5px;"align="center"> </td>‘;

if(paramsObj.menuItemText!= null && paramsObj.menuItemText != "")
text= ‘<td> ‘+paramsObj.menuItemText+‘ </td>‘;
else
text= ‘<td> </td>‘;

this.menuItemsHTML+= ‘<tr id="‘+id+‘"onmouseover="javascript:this.style.backgroundColor = \‘#C3E2F8\‘"onmouseout="javascript:this.style.backgroundColor = \‘#F0F0F0\‘"style="height:25px;cursor:pointer;" onclick="‘+setOnclick+‘;">‘+ img + text + ‘</tr>‘;
if(paramsObj.menuSplit!= null && paramsObj.menuSplit == true){
this.menuItemsHTML+= ‘<tr style="height:1px;"><td colspan="2"valign="middle"><hr size="1" align="center"style="border-top: 1px dashed#C0C0C0;width:85%;"></td></tr>‘;
}

this.menuItemsIndex++;
};

};
/** 显示右键菜单**/
this.show= function(){
RightKeyMenu.menuObj.innerHTML= ‘<table id="table_‘+this.menuId+‘"bordercolor="#CCCCCC" rules="groups" border="1"cellSpacing="0" cellPadding="0"style="border-collapse:collapse;min-width:80px;">‘+this.menuItemsHTML + ‘</table>‘;

vardbcw = document.body.clientWidth;
vardbch = document.body.clientHeight;
vardbsl = document.body.scrollLeft;
vardbst = document.body.scrollTop;

varevent = this.getEvent();

varrightedge = dbcw - event.clientX;
varbottomedge = dbch - event.clientY;

RightKeyMenu.menuObj.style.display= "";
if(ie){
if(rightedge < RightKeyMenu.menuObj.offsetWidth) {
RightKeyMenu.menuObj.style.left= (dbcw >= RightKeyMenu.menuObj.offsetWidth) ? (dbcw -RightKeyMenu.menuObj.offsetWidth) : 0;
}else {
RightKeyMenu.menuObj.style.left= dbsl + event.clientX;
}

if(bottomedge < RightKeyMenu.menuObj.offsetHeight) {
RightKeyMenu.menuObj.style.top= (dbch >= RightKeyMenu.menuObj.offsetHeight) ? (dbch -RightKeyMenu.menuObj.offsetHeight) : 0;
}else {
RightKeyMenu.menuObj.style.top= dbst + event.clientY;
}
}else{
if(rightedge < RightKeyMenu.menuObj.offsetWidth) {
RightKeyMenu.menuObj.style.left= dbcw - RightKeyMenu.menuObj.offsetWidth;
}else {
varleftXValue = dbsl + event.clientX+6;
RightKeyMenu.menuObj.style.left= leftXValue + "px";
}

if(bottomedge < RightKeyMenu.menuObj.offsetHeight) {
RightKeyMenu.menuObj.style.top= (dbch >= RightKeyMenu.menuObj.offsetHeight) ? (dbch -RightKeyMenu.menuObj.offsetHeight) : 0;
}else {
varleftYValue = dbst + event.clientY;
RightKeyMenu.menuObj.style.top= leftYValue + "px";
}
}
RightKeyMenu.menuObj.style.visibility= "visible";
event.returnValue= false;
returnfalse;
};
/** 获取鼠标事件**/
this.getEvent= function(){
if(document.all) {
returnwindow.event;
}
func= this.getEvent.caller;
while(func != null) {
vararg0 = func.arguments[0];
if(arg0) {
if((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof(arg0) == "object" && arg0.preventDefault &&arg0.stopPropagation)) {
returnarg0;
}
}
func= func.caller;
}
returnnull;
}
},
/** 隐藏右键菜单**/
hidden: function(){
if(RightKeyMenu.menuObj!= null){
RightKeyMenu.menuObj.style.display= "none";
RightKeyMenu.menuObj= null;
}
}
}
 </span>

四、总结

  以上就能够实现一个简单的右击菜单,假设想把它运用的项目中。还须要和系统进行融合和封装。只是相信我们一定能够的,加油!

时间: 2024-11-03 05:40:33

右击菜单简单实现的相关文章

WPF实现窗口最小化到托盘,并且实现右击菜单

原版是从网上找了一位大神的,自己只是用了一点适合自己的. 具体实现 1.首先已经确认WPF中没有实现最小化托盘的类与方法,用到了winform中的程序集 using Drawing = System.Drawing;using Forms = System.Windows.Forms; 2.XAML的后代相应事件的Demo,只是为了看起来方便~!其中也包含了在任务栏中不现实图标,只在托盘中显示.双击实现窗口的还原.没用到大神写的,自己琢磨了个,令人想不到的蛋疼的后果还没出现,也就暂时这样了. 1

ITOO右击菜单实现

ITOO做了持续了这么长时间,客户端使用MVC+EF+EasyUI框架,服务端在三层基础上添加WCF服务,后来加入容器,AOP(还没怎么接触),封装了在我们刚开始看来神秘的底层方法,克服了很多技术难点,单点登录,动态建库切库...发现自己需要积累的还有很多很多,ITOO做到现在3.1,成绩系统也算到了3.0吧,不管自己进度还是什么原因,没能加入ITOO1.0,很快跟了ITOO1.0的尾巴,和ITOO2.0同步,做了成绩1.0的组长,当时新阳的一句总结很犀利:组长就是技术上什么都不懂,但哪个地方都

给文件右击菜单增加7-ZIP浏览功能(用注册表设置Shell调用预览命令)

疯狂delphi delphiXE7.XE8.XE10公开课A 群号:58592705 QQ:513187410 朱建强 BAT-给文件右击菜单增加7-ZIP浏览功能 Reg给文件右击菜单增加7-ZIP浏览功能 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\用7-ZIP浏览(ZJQ)]"icon"="d:\\7ZIP.ico" [HKEY_CLASSES_ROOT\*\shell\用7

可以固定的顶部的导航菜单简单实例代码

可以固定的顶部的导航菜单简单实例代码:固定于网页顶部的导航栏效果在当下网站比较流行,所谓的固定于网页的顶部一般来说并不是一直固定于顶部,而是在开始是位于某一个位置,当下拉滚动条使其到达顶部的时候才会固定在顶部,下面通过代码实例介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" con

jquery,tree无限级树形菜单+简单实用案例

jquery,tree无限级树形菜单+简单实用案例 我在项目中用到产品类别的树形.各种地方都要用. 我就封装起来,方便以后调用. 记录下来,希望给新手们提供帮助.要记得导入jquery.js  tree.js 哦 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri=&quo

Qt 鼠标右击菜单建立

这几天在公司进行鼠标右击菜单编写,为SoftPLC项目左边的工程树实现一个右键菜单,分别包括(新建(PPLC.SPLC).增加.删除.重命名.创建PCG文件).遇到一些问题,现在已经得到解决,分享一下: QWidget及其子类都可有右键菜单,因为QWidget有以下两个与右键菜单有关的函数: Qt::ContextMenuPolicy contextMenuPolicy () const void setContextMenuPolicy ( Qt::ContextMenuPolicy poli

自定义控件实现图像的显示和放大缩小,平移,右击菜单选择“自适应窗口”“保存图像”

前面介绍了2个控件组合在一起实现,对PictureBox控件的操作,今天我们自己新建一个控件来自己用. 新建一个Windows窗体解决方案,添加“用户控件”,把PictureBox控件拖到指定的区域,给我们要自己定义的控件改下名字UserControl_Display 界面就完成了,现在我们要自定义的控件添加事件和右击菜单(contextMenuStrip1)控件 1 using System; 2 using System.Collections.Generic; 3 using System

使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样,对于标准SQL语句支持最好的是mssql和postgre,这个不需多讲,我们只讲讲单表情况下的postgre如何通过迭代查询获取有层级关系的数据. 一.表结构举例 MENU表 ID VARCHAR2(32)     N   sys_guid()    节点idFENXID VARCHAR2(32)

无限级菜单简单的设计

策略:数据库就一张表,前端查询出所有的可显示的菜单,在前端进行循环展示. 1,数据库表的设计 CREATE TABLE sys_menu ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(64) NOT NULL, url VARCHAR(255), pid INT NOT NULL DEFAULT 0, isLeaf TINYINT NOT NULL DEFAULT 1 COMMENT '0表示不是叶子,1表示是叶子', status TINYINT