2018-01-01

oncontextmune事件

当用户在某元素上点击鼠标右键时触发此事件。

如何获取鼠标位置

当用户点击某元素,并触发某个鼠标事件时,可以根据该事件对象的信息获取鼠标的位置。鼠标在该元素内容区域的坐标

  • 横向:clientX
  • 纵向:clientY
    eg:
someEle.addEventLisntener('click',function(event){
    let mouseIndexX = event.clientX; //鼠标横向位置
    let mouseIndexY = event.clientY; //鼠标纵向位置
});

如何实现页面屏蔽右键菜单

在讲实现方法前,先了解一下事件的捕获和冒泡

1.事件冒泡

事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接受,然后逐级向上传播到较为不具体的节点(文档)
eg:比如有当前这个DOM结构

document
  html
    body
      div

如果你点击了<div>元素,那这个click事件会按照下面的顺序传播:

div > body > html > document

也就是说,click事件首先在<div>元素上发生,然后,click事件沿Dom树向上传播,在每一级节点上都会发生,直至传到document对象(即不单单<div>元素绑定的click事件会被触发,如果<body>元素也绑定了click事件,那也会被触发。利用此特性,可以实现事件委托(事件代理)

2.事件捕获

事件捕获的思想跟事件冒泡相反。即不太具体的节点更早接收到事件,而最具体的节点应该最后接受事件。
如果以前面的dom结构为例,则事件传播的走向如下

document > html > body > div

3.addEventListener()函数

一般浏览器都是使用事件冒泡(默认)
当然我们也可以更改事件的传播顺序,不过要使用addEventListener这个方法为元素添加事件。
addEventListener函数有三个参数
参1:事件名称,参2:事件函数
参3:true || false
true:表示在捕获阶段调用事件处理程序
false:表示在冒泡阶段调用事件处理程序
使用addEventListener函数的好处是可以为元素添加多个事件处理程序(可同名),触发事件时,按添加的顺序执行

4.阻止事件

  • preventDefault
    阻止DOM元素的默认行为,例如阻止表单type="submit"的button或input的提交表单行为。
  • stopPropagation
    阻止事件的继续传播(冒泡)
  • stopImmediatePropagation
    阻止其他事件处理函数执行,并也会阻止事件的传播。
    stopPropagation和stopImmediatePropagation的区别:
    前者阻止事件继续向上传播,但不阻止同类型事件的执行,比如
someEle.addEventListener('click',function(event){
  console.log('hello world');
  event.stopProgagation();
});
someEle.addEventListener('click',function(){
  console.log('你好');
}
// hello world
// 你好

在 click 事件绑定的第一个函数中,调用了stopPropagation(),这样会阻止事件继续向上冒泡,即该元素的父级和祖先元素的click不会被执行,但是该元素的click事件绑定的第二个函数,则会执行。
如果使用

event.stopImmediatePropagation();
// hello world

那除了事件不会向上冒泡之外,在调用了这个方法的函数中的后面绑定的函数也不会执行

解决方法

绕了一圈回来,现在终于可以来了解一下解决方法了。
其实如果看了上面的内容,相信大家都应该知道怎么解决了
没错,其实就一行代码
event.preventDefault()
只要阻止dom元素的默认行为即可。右键单击网页一般会有默认的菜单栏弹出,只要阻止了它的默认行为就解决了这个问题。

其他知识(css属性)

1.visibility

visibility:visible || hidden || collapse || inherit
visible(默认值:可见的)inherit(继承父级visibility属性)
hidden(隐藏):使用该属性的元素在页面中不可见,但是还占据相应的文档布局
collapse(??)用于隐藏表格,可删除一行或者一列,删除后影响表格布局。当不用于表格时,作用等同于hidden?

visibility对比display

两者都有隐藏元素的作用,不同的是,前者元素隐藏后,还占据着原来的文档位置。后者隐藏后,该元素直接从文档中消失。

JS与visibility

在元素应用了visibility:hidden属性隐藏后,该元素就不接受js效果了。
这个不接受JS效果指的是:js为该元素添加的事件,比如click、mousemove等事件不起作用。就你点击那个相应的位置或者其他操作,原本设定的效果都不会出来。但是还是能通过JS将这个元素进行位移、变色等其他操作的,即使hidden了!

还有其他该知识点请看
深入理解CSS元素visibility

2.元素的宽高:

  • offsetWidth和offsetHeight
    eg : offsetWidth = width + padding + border
    style.width也是当前对象的宽度(width+padding+border)。
    区别:
    1)style.width返回值除了数字外还带有单位px;
    2)如对象的宽度设定值为百分比宽度,则无论页面变大还是变小, style.width都返回此百分比,而offsetWidth则返回在不同页面中对象的宽度值而不是百分比值;
    3)如果没有给 HTML 元素指定过 width样式,则 style.width 返回的是空字符串;
  • scrollWidth 和 scrollHeight
    获取对象的滚动宽/高度
  • clientWidth 和 clientHeight
    获取对象内容的宽高,包括padding,不包括border的宽高

3.鼠标指针位置:

screenX/Y: 参照点也就是原点是整个屏幕的左上角,不限于浏览器内。
clientX/Y: 参照点是浏览器内容区域的左上角(浏览器显示区域的左上角),该参照点会随之滚动条的移动而移动。
pageX/Y:参照点也是浏览器内容区域的左上角(整个页面的左上角),但它不会随着滚动条而变动

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容

  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    程序员poetry阅读 114,313评论 24 450
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,330评论 0 2
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,167评论 0 1
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 707评论 0 9
  • 人们生活的压力越来越大,特别是独自在外打拼的年轻人,工资上涨速度永远赶不上房价和物价的攀升,经常工作累成狗,回家只...
    城堡小姐阅读 241评论 2 1