任务目的

了解js中的oncontextmenu事件
了解如何获取鼠标位置
了解如何实现页面屏蔽右键菜单

任务描述

实现鼠标右击时,出现自定义菜单。点击非自定义菜单区域时,隐藏自定义菜单。参考样例(点击查看),实现页面开发,要求实现效果基本一致。
点击自定义菜单条目时,弹出菜单条目名称。

自定义网页右键菜单总结-风君雪科技博客

任务注意事项

自定义菜单出现在鼠标指针右下方,当右边区域不够大,展示在左下方,同理,当下方区域不够时,展示在鼠标指针上方
注意测试不同情况,尤其是极端情况下的效果
尽量不要使用第三方库,包括jQuery

参考资料

oncontextmenu: 了解JavaScript中oncontextmenu的基本知识
event那些事 收集整理的事件相关资料

自定义网页右键菜单总结

1、 oncontextmenu Event

当用户右键点击一个元素时,触发oncontextmenu事件,打开上下文菜单。

注意:虽然所有浏览器均支持oncontextmenu事件,但是目前只有火狐浏览器支持contextmenu属性。

语法:

在HTML中:

<element oncontextmenu=”myScript“>

在JavaScript中

object.oncontextmenu = function(){myScript};

在JavaScript中,使用addEventListener()方法:

object.addEventListener(“contextmenu”, myScript);

2、 CSS3 :not Selector

:not(selector)选择器除了指定的元素或选择器外,其他元素均使用此样式。

CSS语法:

:not(selector) {
    css declarations;
}

3、 MouseEvent clientX Property

当鼠标事件变化时,clientX属性返回鼠标相对当前窗口的水平坐标,如果要获取鼠标相对于当前窗口的垂直坐标,使用clientY属性。

注意:这是一个只读属性。

语法:

event.clientX

eg:var x = event.clientX;

4、 如何让原有的右键菜单不可用

<body oncontextmenu=”return false;”>

事件处理方法中 的 return false可阻止事件宿主的默认行为;

5、 HTML DOM clientWidth Property

clientWidth属性返回一个元素的可视像素宽度,包括padding,但不包括border,scrollbar和margin。当元素内容比元素实际宽度要宽时,这个属性只返回可视宽度。这个属性经常和clientHeight属性同时使用。

注意:使用offsetHeight和offsetWidth属性,返回一个元素的可视高度和宽度,包括padding,border和scrollbar。

语法:

element.clientWidth

返回值:一个数字,代表一个元素以像素为单位的可视宽度,包括padding。

6、 HTML DOM offsetHeight Property

offsetHeight属性返回一个元素以像素为单位的可视高度,包括padding,border,scrollbar但不包括margin。如果元素内容比元素实际高度要高,此属性只返回可视高度。这个属性常和offsetWidth属性同时使用。

语法:

element.offsetHeight

返回值:一个数字,代表一个元素以像素为单位的可视高度,包括padding,border和scrollbar。

7、 JavaScript Window Screen

window.screen对象包含用户屏幕的信息。window.screen对象可以不写window前缀。

属性:

screen.返回以像素为单位的屏幕宽度值。

screen.height:返回以像素为单位的屏幕高度值。

screen.availWidth:返回以像素为单位的屏幕可用宽度,比如,不包括任务栏。

screen.availHeight:返回以像素为单位的屏幕可用高度,比如,不包括任务栏。

screen.colorDepth:返回一个颜色所用的bit数。目前,现在计算机为24bit或32bit。

screen.pixelDepth:返回屏幕的像素深度属性。

8、 已提交作业

代码地址https://github.com/Nunawading2016/2017-IFE-Baidu/blob/master/task4-3

预览地址http://htmlpreview.github.io/?https://github.com/Nunawading2016/2017-IFE-Baidu/blob/master/task4-3/index.html