神奇的pinter-events

       pinter-events,是一个CSS属性,但是它的作用,比起CSS的效果,它更像是做了JS应该做的工作。

       可以看一下它在MDN上的简介“CSS属性,指定在什么情况下(如果有)某个特定的图形元素可以成为鼠标事件的target”。这里的图形元素,可以为普通的DOM,也可以为canva和svg等元素。它的属性值见下图。

po

       这里,我们主要关注它的两个属性值,auto,和none,当设置为auto时,和没设置是一样的效果(O.O),当设置为none时,被绑定的元素将不会成为鼠标事件的target,意味着鼠标在这个元素上触发一些事件时会失效,如果被绑定的元素底部有其他的dom元素,则鼠标事件会穿透它,当做它不存在,去触发位于其底部的dom元素的鼠标事件。可能你还是有些模糊,没关系,后面会讲它的有关示例,也就是妙用。它的其它属性值均用于SVG上,感兴趣的可以去查阅相关资料,这里不再赘述。

       接下来进入正题,讲它的妙用。当你遇到一个如图所示的缩略图的需求时,你会怎么做?

效果示例图

       要求是,当鼠标滑入图片,展示其上的蒙层,蒙层中居中显示“点击查看大图”,当鼠标移开,则蒙层消失。

   一般思路有:

·实现思路:img标签初始展示默认图标,当鼠标划入img标签,则展示能盖住img的蒙层,蒙层居中显示提示文字如点击查看大图

·开发过程中的部分代码有:

初始代码

·实现效果:代码初看可能看不出问题,实际则不然,最终的效果是,蒙层一直在闪烁,可以先想想为什么?  

       我的猜想是:初始,鼠标滑入img标签,根据代码逻辑,蒙层即展示,蒙层展示后,蒙层成为了鼠标事件的target,隔档了img元素,监听事件即监听到mouseleave事件,则蒙层消失,当蒙层消失后,鼠标又滑入img标签,蒙层又展示,如此循环往复,即出现了蒙层闪烁的效果。那有什么解决方法呢,解决方案很多,这里我简单列出几种。

解决方案一:利用延迟,平缓闪烁的效果。代码如下,鼠标滑入后,蒙层立即展示,当鼠标滑出,监听事件监听到mouseleave,则将控制蒙层消失的逻辑延迟执行,这样的效果比闪烁的蒙层要好很多,当用户快速的滑入点击时几乎看不出差别,但是当鼠标在img上停留时,还是会有一秒一次的闪烁,看起来已经平缓了很多,但是显然跟预期还是有差别的,于是我又想出了第二种解决方案。

解决方案一

解决方案二:增加一个兄弟节点,兄弟节点作为蒙层,监听img标签的滑入,监听其兄弟节点(即蒙层)的滑出。也即,当监听到鼠标滑入img标签时,即插入其一个div作为其兄弟节点,写相对定位的方式让其作为img的蒙层,监听滑出时不再监听img的鼠标滑出,而是转而监听蒙层,这样的效果,与预期的一模一样,代码如下,但是缺点就是需要增加多余的dom,还不够简洁方便,于是就有了解决方案三,也就是这篇文章的主角——pointer-events。

解决方案二

解决方案三:基于原始的代码,在蒙层的样式中加一行代码,即如下所示,即可完美解决这个问题。蒙层将不会再成为鼠标事件的target,意味着任何鼠标事件都能够穿透它,都“看不见它”,这样便能简洁的实现预期的效果图。这是我目前为止,发现最方便的方式,大家有什么更好的解决方法,可以留言交流0.0。


解决方案三

       在文章的一开始提到,比起css,它的作用更像是JS,那么,能不能用JS的方式实现类似的效果呢?

       在翻阅很多资料后,发现也是可以的,下面的实现基于JQ,来自张鑫旭老师的一篇文章。这里的实现思路是,监听原元素的鼠标事件,然后将其短暂消失,从而获取其dom底部的另一个dom元素,然后组织原元素一系列的鼠标事件的触发,通过事件委托的方式,委托其底部的元素代替其触发鼠标事件,从而做到穿透的效果。

JS的实现

       可以看到,这个属性很神奇,其用处也很广泛,像表单项的禁止使用、透明的网页式的海报,还有在做地图项目时,往往需要在地图上方加一些img或者是canvas元素作为提示图标,而这些元素是会影响地图的鼠标事件的触发的,这时pointer-events属性就有很大的作用了,当然,它最广泛的应用,还是SVG。

       它这么神奇,那它的兼容性怎么样,见下图,可以看到,它的兼容性也很不错,包括在移动端Android、IOS上的支持都还不错。

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

推荐阅读更多精彩内容