blink的SpatialNavigationEnabled会引起刷新区域过大

blink里的setting,有个SpatialNavigation,设置为true的话,在

EventHandler::handleMouseFocus -》 element->isMouseFocusable()里会判断这个settings,


> miniblink.dll!blink::ElementRuleCollector::collectMatchingRules
  miniblink.dll!blink::StyleResolver::matchRuleSet
  miniblink.dll!blink::StyleResolver::matchUARules
  miniblink.dll!blink::StyleResolver::matchAllRules
  miniblink.dll!blink::StyleResolver::styleForElement
  miniblink.dll!blink::Element::originalStyleForLayoutObject
  miniblink.dll!blink::Element::styleForLayoutObject
  miniblink.dll!blink::Element::recalcOwnStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalc
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalcChildStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalcChildStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalcChildStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalcChildStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::ContainerNode::recalcChildStyle
  miniblink.dll!blink::Element::recalcStyle
  miniblink.dll!blink::Document::updateStyle
  miniblink.dll!blink::Document::updateLayoutTree
  miniblink.dll!blink::Document::updateLayoutTreeIfNeeded()
  miniblink.dll!blink::Document::setFocusedElement
  miniblink.dll!blink::FocusController::setFocusedElement
  miniblink.dll!blink::EventHandler::handleMouseFocus


这样,如果SpatialNavigationEnabled为true,大部分元素都拥有了focusable的能力。而blink的默认样式有一句


:focus {
    outline: auto 5px -webkit-focus-ring-color
}

所以会让元素拥有一个焦点框。

而焦点框会在LayoutObject::paintInvalidationReason里,

走到这句

    if (styleRef().outlineStyleIsAuto())
        return PaintInvalidationFocusRing;

返回一个
PaintInvalidationFocusRing

的刷新原因。

这个会导致整个layer被刷新。

如果网页很长,或者div很长的话,这个刷新有可能是全屏的。代价非常大。

搜了下这个settings,是为无障碍化设计的,貌似是用键盘上下左右键来控制焦点转移的。一般是默认关闭状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值