转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> 网页制作 >> 正文
CSS+JavaScript打造超酷右键菜单         ★★★★

CSS+JavaScript打造超酷右键菜单

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1326 更新时间:2009/4/23 13:48:05

  其实在网页上实现右键菜单的风格化已经是一个老话题了,正常情况下,网页上的右键菜单是默认IE右键选项,包括了一些常用的功能。

  但有时候我们会遇到这样的问题,我们希望禁止访问者使用右键菜单或者希望屏蔽右键菜单的某些功能,比如,为了保护网页内容我们不希望访问者通过右键菜单来查看网页源代码,也不希望其通过右键来对网页内容进行选取、复制等,很多网页设计者在考虑这个问题的时候都是简单地对右键进行屏蔽,与其这样我们还不如用脚本来实现一个风格右键菜单,并在这个右键菜单中装上我们自己的内容。下面我们来尝试一下这个设想。

  我们首先要考虑的问题是通过鼠标右键单击事件来调用一个函数,这个函数用来显示新的右键菜单的内容。我们知道鼠标的右键单击事件是通过document.oncontextmenu来调用的,如果我们自行定义document.oncontextmenu=某个函数,这样就可以实现新右键菜单的调用了,关键问题是如何通过这个函数来控制菜单的显示,同时,还要通过窗体的单击事件document.body.onclick(一般指左键单击)来隐藏菜单,这样一个过程就完成了鼠标右键菜单的弹出和隐藏。

  首先来看看这段脚本代码:

/*初始化*/
<script language="JavaScript1.2">
/*如果当前浏览器是Internet Explorer,document.all就返回真*/
if (document.all && window.print) {

/*选择菜单方块的显示样式*/
ie5menu.className = menuskin;

/*重定向鼠标右键事件的处理过程为自定义程序showmenuie5*/
document.oncontextmenu = showmenuie5;

/*重定向鼠标左键事件的处理过程为自定义程序hidemenuie5*/
document.body.onclick = hidemenuie5;
}
</script>

  一般情况下页面装载完毕后才发生鼠标右键事件,所以为了不影响页面的装载速度我们可以把这段代码放在页面的最后面。这段代码很简单,首先检验是不是IE浏览器,如果是那么下面的定义就应该有效。也就是说当检查到客户端使用的浏览器是IE的时候那么当用户产生右键事件时就调用函数showmenuie5,当用户产生左键事件时就调用函数hidemenuie5。

  解决了上面这个问题,现在我们要考虑如何通过函数showmenuie5和函数hidemenuie5来实现菜单的显示和隐藏。当然,这里的菜单并不是真正意义的右键菜单,而是我们自己做的一个div,在这个div中装上我们想要装的东西。通过鼠标事件调用函数来控制它的显隐,这就达到了使用鼠标右键一样的效果了。

  下面我们来设计一个div,请看代码:

<div id="ie5menu" class="skin0" onMouseover="highlightie5()" onMouseout="lowlightie5()" onClick="jumptoie5();">
<div class="menuitems" url="javascript:history.back();">后退</div>
<div class="menuitems" url="javascript:history.forward();">前进</div>
<hr>
<div class="menuitems" url="http://www.webjx.com" target="_blank">网页教学</div>
<div class="menuitems" url="http://www.webjx.com/htmldata/sort/3.html" target="_blank">网页制作</div>
<div class="menuitems" url="http://www.webjx.com/htmldata/sort/4.html" target="_blank">动画制作</div>
<div class="menuitems" url="http://www.webjx.com/htmldata/sort/6.html" target="_blank">网络编程</div>
<hr>
<div class="menuitems" url="http://www.webjx.com/htmldata/sort/15.html" target="_blank">视频教程</div>
<div class="menuitems" url="http://www.webjx.com/htmldata/sort/1.html" target="_blank">业界新闻</div>
<hr>
<div class="menuitems" url="http://www.webjx.com/aboutus.htm" target="_blank">关于本站</div>
<div class="menuitems" url="mailto:tslxg@hotmail.com">与我联系</div>
</div>

  这一块的最外层是一个id为ie5menu的div,我们定义了它的样式为skin0,当这个div处于显示状态时可能产生onMouseover事件和onMouseout事件以及onClick事件,就像我们在使用右键菜单时要对其中的选项进行操作一样,这里的onMouseover事件、onMouseout事件和onClick事件能够模拟整个鼠标右键事件。这里,我在右键菜单中定义了这么几个选项:页面操作功能、栏目导航功能、站点导航功能以及其它信息,能够起到良好的用户体验效果。

  这里使用了div的url属性,其值可以是事件也可以是页面地址,当然,这个地址包括绝对地址和相对地址,上面的事件也很简单这里就不需要我多说了。

  下面我们来分析几个函数:showmenuie5()函数(显示菜单)hidemenuie5()函数(隐藏菜单)以及jumptoie5()函数(右键菜单选项跳转)

  showmenuie5()函数:

/*显示菜单*/
function showmenuie5() {
searchform.k.value=window.document.selection.createRange().text;

/*获取当前鼠标右键按下后的位置,据此定义菜单显示的位置*/
var rightedge = document.body.clientWidth-event.clientX;
var bottomedge = document.body.clientHeight-event.clientY;

/*如果从鼠标位置到窗口右边的空间小于菜单的宽度,就定位菜单的左坐标(Left)为当前鼠标位置向左一个菜单宽度*/
if (rightedge <ie5menu.offsetWidth)
ie5menu.style.left = document.body.scrollLeft + event.clientX - ie5menu.offsetWidth;
else
/*否则,就定位菜单的左坐标为当前鼠标位置*/
ie5menu.style.left = document.body.scrollLeft + event.clientX;

/*如果从鼠标位置到窗口下边的空间小于菜单的高度,就定位菜单的上坐标(Top)为当前鼠标位置向上一个菜单高度*/
if (bottomedge <ie5menu.offsetHeight)
ie5menu.style.top = document.body.scrollTop + event.clientY - ie5menu.offsetHeight;
else
/*否则,就定位菜单的上坐标为当前鼠标位置*/
ie5menu.style.top = document.body.scrollTop + event.clientY;

/*设置菜单可见*/
ie5menu.style.visibility = "visible";
return false;
}

  hidemenuie5()函数:

/*隐藏菜单*/
function hidemenuie5() {
/*很简单,设置visibility为hidden就OK!*/
ie5menu.style.visibility = "hidden";
}

  jumptoie5()函数:

/*转到新的链接位置*/
function jumptoie5() {
var seltext=window.document.selection.createRange().text
if (event.srcElement.className == "menuitems") {
/*如果存在打开链接的目标窗口,就在那个窗口中打开链接*/
if (event.srcElement.getAttribute("target") != null)
window.open(event.srcElement.url, event.srcElement.getAttribute("target"));
else
/*否则,在当前窗口打开链接*/
window.location = event.srcElement.url;
}
}  这三个函数可以说实现右键菜单功能的关键函数,showmenuie5()函数定义了id为ie5menu的div在document.oncontextmenu的基本属性,包括其显示的位置,其位置由鼠标位置决定,也就是说鼠标在何处点击那么该div就在何处显示,并且有非常重要的一点,那就是此时该div的样式的visibility属性值一定是visible,即是可见的,否则前面定义其显示位置也就没有什么意义了。hidemenuie5()函数简单地定义了ie5menu的visibiliy属性为隐藏。jumptoie5()函数实现鼠标点击右键菜单中的层时发生的事情,也就是执行选项,包括打开窗口链接或者执行脚本语句,有一点需要提醒的是不管是窗口链接或者脚本语句,它们都等于url的值,例如:url="http://www.webjx.com",url="javascript:window.location='htt



[Web开发]用PHP实现Javascript的escape(),unescape()的方法  [网页制作]Javascript获取各种浏览器可见窗口大小
[网页制作]Javascript 表单之间的数据传递  [网页制作]用 Javascript 写的一个映射表类
[网页制作]Javascript 编写的文字放大效果  [网页制作]在CSS样式表里使用JavaScript
[网页制作]Javascript +CSS横向三级导航菜单  [网页制作]CSS+JavaScript打造超酷右键菜单(2)
[网页制作]CSS+javascript特效赏析  [网页制作]javascript 对象与数组参考大全
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台