Webkit 浏览器默认焦点查找算法

当我们用 方向键 在 HTML页面 上移动,此时,可通过多种方式控制焦点行为:

1、通过 JS 逻辑,控制焦点的移动,此时下一个焦点位置,完全是由 JS 来控制

2、可通过浏览器默认行为,浏览器会计算焦点的位置,响应上下左右按键是通过 各个焦点相对位置 来确定下一个焦点

注:

1、当页面通过 JS 逻辑控制焦点时,要添加 event.preventDefault() 来阻止浏览器的默认焦点行为,以防止焦点被多次处理

2、浏览器 判定 焦点位置的时候,会通过多个条件来判定

  <1> 从 DOM 树遍历结点,找出在移动方向上的结点,比如,按方向右键时,在当前结点左边以及正上、正下的结点都被 PASS

  <2> 从上面找出的可能结点中,计算每个 Candidate跟当前结点的距离,并跟最近的结点对比,

         如小于最近结点,则设此结点为最近结点【findFocusCandidateInContainer

  <3> 判断 Candidate 跟当前结点方向是否完全在一条直线上(aligned),平行结点优先于部分平行结点,

 即 正对的 优先于 斜对的,添加次条件以为,计算两个结点距离时,结点通常不是一个点,而是有宽高,

 距离获取的都是最近的部分,可能相等

  <4> 两个 Candidate 可能有重合部分,此时,浏览器会通过 HitTest 算法,来判断究竟是哪个结点优先,

 但在 HitTest 时,可能存在后一个结点盖住前面结点部分区域的问题,这个还要看情况来判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值