模拟windows平台的上下文菜单效果代码

 更新时间:2011年03月10日 23:27:55   作者:  
技术上没什么难的,就是定义一个隐藏的box,当触发上下文事件时显示它,当单击body任意处时又隐藏它。
代码演示:

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

结构:
复制代码 代码如下:

<div id="wrap">
<ul id="menu">
<li><a href="">撤销</a></li>
<li><a href="">重做</a></li>
<li><a href="">复制</a></li>
<li><a href="">粘贴</a></li>
<li><a href="">大小写转换</a></li>
<li><a href="">回车</a></li>
<li><a href="">拼写检查</a></li>
<li><a href="">新建</a></li>
<li><a href="">自定义</a></li>
<li><a href="">图形选项</a></li>
<li class="no"><a href="">关闭</a></li>
</ul>
</div>

code是这样:
复制代码 代码如下:

function $(id) {
return document.getElementById(id);
};

var EventUnit = {
addHandler: function(element, type, handler) {//添加事件处理程序
if(element.addEventListener) {
element.addEventListener(type, handler, false);
} else if(element.attachEvent) {
element.attachEvent('on' + type, handler);
} else {
element['on' + type] = handler;
};
},
getEvent: function(event) {
return event ? event : window.event;
},
preventDefault: function(event) {//取消事件默认动作
if(event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
};
}
}

EventUnit.addHandler(window, 'load', function() {
var wrap = $('wrap');
var menu = $('menu');
var menuStyle = menu.style.display;
var x = wrap.offsetLeft + wrap.clientWidth, y = wrap.offsetTop + wrap.clientHeight;
var w = 0, h = 0;
var left = 0, top = 0;

EventUnit.addHandler(wrap, 'contextmenu', function(event) {
event = EventUnit.getEvent(event);
EventUnit.preventDefault(event);

menu.style.display = 'block';
w = menu.clientWidth;
h = menu.clientHeight;
left = (x - event.clientX >= w) ? event.clientX - wrap.offsetLeft : event.clientX - wrap.offsetLeft - w;
top = (event.clientY + h <= y) ? event.clientY - wrap.offsetTop : event.clientY - wrap.offsetTop - h;
menu.style.left = left + 'px';
menu.style.top = top + 'px';
});

EventUnit.addHandler(document, 'click', function() {
menu.style.display = menuStyle;
});
});

相关文章

  • JavaScript 作用域链解析

    JavaScript 作用域链解析

    一直对Js的作用域有点迷糊,今天偶然读到Javascript权威指南,立马被吸引住了,写的真不错。我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫。谢谢心得吧
    2014-11-11
  • 微信小程序跳转到其他网页(外部链接)的实现方法

    微信小程序跳转到其他网页(外部链接)的实现方法

    这篇文章主要介绍了微信小程序跳转到其他网页(外部链接)的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • JavaScript数据在不同页面的传递(URL参数获取)

    JavaScript数据在不同页面的传递(URL参数获取)

    这篇文章主要介绍了JavaScript数据在不同页面的传递(URL参数获取),下面文章围绕JavaScript数据在不同页面的传递的实现过,想了解的小伙伴可以和小编一起进入文章了解具体内容,需要的也朋友可参考一下
    2021-12-12
  • Javascript 作用域使用说明

    Javascript 作用域使用说明

    在传统的面向对象程序设计中,主要关注于公用和私有作用域。公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。
    2009-08-08
  • ES6 Promise.race的用法详解

    ES6 Promise.race的用法详解

    本文主要介绍了ES6 Promise.race的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • JavaScript实现点击按钮直接打印

    JavaScript实现点击按钮直接打印

    很多网站都有此功能,当浏览到底部时都会有一个打印按钮,点击打印按钮就可以完成打印功能,功能非常不错,人性化,下面通过本文给大家介绍JavaScript实现点击按钮就打印的代码,需要的朋友参考下
    2016-01-01
  • turn.js异步加载实现翻书效果

    turn.js异步加载实现翻书效果

    这篇文章主要为大家详细介绍了turn.js异步加载实现翻书效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • VS Code转换大小写、修改选中文字或代码颜色的方法

    VS Code转换大小写、修改选中文字或代码颜色的方法

    最近在使用VS Code,发现了不少使用的小技巧,觉着有必要给大家分享下,下面这篇文章主要给大家介绍了关于VS Code转换大小写、修改选中文字或代码颜色的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)

    js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)

    分别针对ie和火狐分别作了对xml文档和xml字符串的解析,考虑到了浏览器的兼容性,至于在ajax环境下解析xml,其实原理是一样的,只不过放在了ajax里,还是要对返回的xml进行解析,感兴趣的朋友可以了解下,或许对你学习js解析xml有所帮助
    2013-02-02
  • js实现横向百叶窗效果网页切换动画效果的方法

    js实现横向百叶窗效果网页切换动画效果的方法

    这篇文章主要介绍了js实现横向百叶窗效果网页切换动画效果的方法,实例分析了javascript实现百叶窗效果的技巧,需要的朋友可以参考下
    2015-03-03

最新评论