exportfunctionpreventDefault(event: Event, isStopPropagation?: boolean) { /* istanbul ignore else */ if (typeof event.cancelable !== 'boolean' || event.cancelable) { event.preventDefault(); }
if (isStopPropagation) { stopPropagation(event); } }
event.cancelable 被提出之后,可以用这个来判断是否可以取消事件,滚动事件只能在第一次取消。non-passive wheel listeners are a problem for scroll performance. 非消极的事件监听器会导致滚动出现性能问题。这是由于在触屏设备上,touch 事件 和 scroll 事件等,会调用preventDefault阻止默认行为导致阻塞。{passive: true} 是提出来让页面的滚动无需等待javascript立即执行,减少惊异的副作用。
MDN 上有关于event.cancelable 的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
functionpreventScrollWheel(event) { // 判断是否等于boolean是因为兼容问题 if (typeof event.cancelable !== 'boolean' || event.cancelable) { // The event can be canceled, so we do so. event.preventDefault(); } else { // The event cannot be canceled, so it is not safe // to call preventDefault() on it. console.warn(`The following event couldn't be canceled:`); console.dir(event); } }