让事件在捕获阶段执行

让事件在捕获阶段执行,而不在冒泡阶段执行的使用场景。
plotly绘制图形,它自带鼠标滚动缩放图形、鼠标移动拖动图形的功能,现在我们想要点击拖动按钮后只能拖动(使滚轮滚动无效),再点击缩放按钮后又可以滚动鼠标缩放。
1、实现鼠标滚动缩放无效
鼠标滚动能缩放图形,是因为插件为鼠标滚动事件绑定了缩放方法。但我们不知道这个方法叫什么名字,而且下次点击缩放按钮后还要再用到这个滚动事件实现缩放。所以我们不能将这个缩放的滚动事件移除掉。
那我们想到一个办法,阻止它被触发就可以了。
在点击拖动按钮后,想要禁用缩放,此时我们在拖动按钮点击的事件回调中,为容器添加一个滚动事件

this.myPlot.addEventListener('wheel',stopPropagation,true)

其中this.myPlot是整个图形所在的最外层容器元素,我不管缩放的滚动事件绑定在哪个元素,总之它一定会在我这个容器元素的里面。
addEventListener的三个参数定义如下:
element.addEventListener(event, function, useCapture)

  • event 必须。字符串,指定事件名。
  • function 必须。指定要事件触发时执行的函数。
  • useCapture 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
    true - 事件句柄在捕获阶段执行
    false- false- 默认。事件句柄在冒泡阶段执行
    这里重要的语句是我们将第三个参数指定为true,那么这个滚动事件就会在捕获阶段执行,也就是在实现缩放的那个事件之前执行。
    然后我们将此滚动的回调定义为如下方法:
function stopPropagation(e){
  e.stopPropagation();
}

在里面我们只干了一件事,就是e.stopPropagation(),停止事件的传播,这样事件就到此结束了,它不会再往下去触发那个缩放的滚动事件了。

2、恢复鼠标滚动缩放
当点击缩放按钮后,我们又需要滚动缩放功能了,此时我们就将先前绑定在容器的滚动事件移除就行了。

this.myPlot.removeEventListener('wheel',stopPropagation,true);

第三个参数为true,指在捕获阶段移除事件句柄。

false- 默认。在冒泡阶段移除事件句柄.
如果添加两次事件句柄,一次在捕获阶段,一次在冒泡阶段,你必须单独移除该事件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值