pointer-events,一个神奇的css属性

pointer-events,搞前端的朋友们应该听说过这个属性吧。每年圣诞节的时候,许多网页上都会挂出一个雪花飘落的特效增加一些节日气氛。有一些是用flash实现的,也有用HTML+js实现的。当时就很好奇为何在页面z轴最上层增加了一个层却完全不会影响下面元素的任何事件响应。简直是前端黑科技。

后来看了大神的解释,原来只用了一个的css属性pointer-events就可以搞定一切了。

看上去确实很神奇,以为会是事件冒泡代理转发之类的很难懂的概念。实际上超级简单,对某一个元素比如div采用div{pointer-events:none}即可让这个HTML元素(包括它的所有子孙元素)失去所有的事件响应。鼠标焦点会直接无视它,click、mouseover等所有事件会穿透它到达它的下一级元素。这个属性看起来似乎很有用,让我一直都想怎样在项目中能有点实际的意义。

直到这两天看到网上一个数据可视化的项目案例,终于找到了一个用武之地。

如图,页面z轴上分两层,底层是基于百度地图和Echarts做的全屏大地图,上层container容器也是全屏的,是用Vue+webSocket做的实时图表table和信息展示文字及header部分,看着简直完美。跑起来测试,地图无法用滚轮缩放移动了,Echart的组件也无法点击交互了。原因也很简单,上层的container层把地图‘挡住了’,这种时候用pointer-events就很有用了,直接pointer-events:none搞定。但是这样一来table因为继承的关系,里面的交互事件也用不了了(本来每行点击可以弹一个dialog展示详情的),这时候可以针对table单独用一个pointer-events:auto事件就又回来了。

这就是我目前遇到了使用这个属性最好的使用场景,那就是用来做一些特效类的交互层级比较多的页面,当然如果你脑洞开得够大,用它动态绑定一些元素,感觉可以玩出一些黑魔法。

如果不知道这个属性的话,暂时我还真没想到其它的方案解决这个难题,欢迎谈谈你的想法啊。不过首先你得先关注我,并转发呢,也可以加我Q群:142991222一起分享,这样我们的友谊才能天长地久。

另外,因为是css3属性,不支持IE直到9!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,792评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,869评论 18 139
  • LBS 位置服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(...
    景岳阅读 990评论 1 0
  • 要做 夜空中最亮的星
    空气猫啊阅读 121评论 0 0
  • Q:给定一个直方图,这里盗一下图,http://blog.csdn.net/nisxiya/article/det...
    shuff1e阅读 401评论 0 0