function getEventPriority(domEventName) {
switch (domEventName) {
case 'cancel':
case 'click':
case 'close':
case 'contextmenu':
case 'copy':
case 'cut':
case 'auxclick':
case 'dblclick':
case 'dragend':
case 'dragstart':
case 'drop':
case 'focusin':
case 'focusout':
case 'input':
case 'invalid':
case 'keydown':
case 'keypress':
case 'keyup':
case 'mousedown':
case 'mouseup':
case 'paste':
case 'pause':
case 'play':
case 'pointercancel':
case 'pointerdown':
case 'pointerup':
case 'ratechange':
case 'reset':
case 'resize':
case 'seeked':
case 'submit':
case 'touchcancel':
case 'touchend':
case 'touchstart':
case 'volumechange':
case 'change':
case 'selectionchange':
case 'textInput':
case 'compositionstart':
case 'compositionend':
case 'compositionupdate':
case 'beforeblur':
case 'afterblur':
case 'beforeinput':
case 'blur':
case 'fullscreenchange':
case 'focus':
case 'hashchange':
case 'popstate':
case 'select':
case 'selectstart':
return DiscreteEventPriority
case 'drag':
case 'dragenter':
case 'dragexit':
case 'dragleave':
case 'dragover':
case 'mousemove':
case 'mouseout':
case 'mouseover':
case 'pointermove':
case 'pointerout':
case 'pointerover':
case 'scroll':
case 'toggle':
case 'touchmove':
case 'wheel':
case 'mouseenter':
case 'mouseleave':
case 'pointerenter':
case 'pointerleave':
return ContinuousEventPriority
case 'message': {
// Scheduler 优先级转换为 React 事件优先级
var schedulerPriority = getCurrentPriorityLevel()
switch (schedulerPriority) {
case ImmediatePriority:
return DiscreteEventPriority
case UserBlockingPriority:
return ContinuousEventPriority
case NormalPriority:
case LowPriority:
return DefaultEventPriority
case IdlePriority:
return IdleEventPriority
default:
return DefaultEventPriority
}
}
default:
return DefaultEventPriority
}
}
function lanesToEventPriority(lanes) {
var lane = getHighestPriorityLane(lanes)
// DiscreteEventPriority = SyncLane,如果 lane 比 SyncLane 优先级高,则返回 DiscreteEventPriority
if (!isHigherEventPriority(DiscreteEventPriority, lane)) {
return DiscreteEventPriority
}
// ContinuousEventPriority = InputContinuousLane,如果 lane 比 InputContinuousLane 优先级高,则返回 ContinuousEventPriority
if (!isHigherEventPriority(ContinuousEventPriority, lane)) {
return ContinuousEventPriority
}
// (lanes & NonIdleLanes) !== NoLanes,NonIdleLanes = 268435455(即1111111111111111111111111111),简单说就是 lanes 中包含非空闲优先级的 lane,则返回 DefaultEventPriority
if (includesNonIdleWork(lane)) {
return DefaultEventPriority
}
return IdleEventPriority
}
var schedulerPriority = getCurrentPriorityLevel()
switch (schedulerPriority) {
case ImmediatePriority:
return DiscreteEventPriority
case UserBlockingPriority:
return ContinuousEventPriority
case NormalPriority:
case LowPriority:
return DefaultEventPriority
case IdlePriority:
return IdleEventPriority
default:
return DefaultEventPriority
}