You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Android Chrome交互媒体控件时自动滚动到已聚焦元素

Android端Chrome点击媒体控件自动回滚到聚焦输入框的解决方案

这是Android版Chrome的已知原生交互缺陷,触发逻辑为:输入类元素(input、textarea等)处于聚焦状态时,浏览器会记录其坐标,后续点击原生渲染的媒体控件时,会默认触发「回到聚焦输入框」的滚动逻辑。由于video/audio的播放、进度条、音量等控件属于浏览器原生UI层,不属于页面DOM节点,因此常规的mousedown/touchstart事件无法监听到这类控件的交互,onplay事件触发时机晚于滚动逻辑,也无法解决问题。

以下是可落地的修复方案:

  • 方案1:全局触摸预判提前失焦
    给页面全局绑定touchstart事件,每次触摸时先判断当前是否存在聚焦的输入类元素,再判断触摸落点是否落在媒体元素的范围内,命中则主动移除输入框的聚焦状态,即可规避后续自动滚动。
    示例代码:
    document.addEventListener('touchstart', (e) => {
      const activeEl = document.activeElement;
      // 仅处理输入类元素聚焦的场景
      if (!['INPUT', 'TEXTAREA'].includes(activeEl?.tagName)) return;
      const mediaElements = document.querySelectorAll('video, audio');
      const touchX = e.touches[0].clientX;
      const touchY = e.touches[0].clientY;
    
      for (const media of mediaElements) {
        const rect = media.getBoundingClientRect();
        const isHitMedia = touchX >= rect.left && touchX <= rect.right 
          && touchY >= rect.top && touchY <= rect.bottom;
        if (isHitMedia) {
          activeEl.blur();
          break;
        }
      }
    }, { passive: true });
    
  • 方案2:自定义媒体控件接管交互
    放弃浏览器原生的媒体控件,自行实现播放、进度条、音量调节等UI和交互逻辑,所有操作都在页面DOM层完成,完全规避原生控件的交互异常问题。
  • 方案3:透明遮罩拦截事件
    给所有媒体元素上层覆盖一层同等大小的全透明div,优先监听遮罩的点击事件,先移除输入框聚焦状态后,再主动触发媒体元素的对应操作。该方案适合不需要调整进度、音量,仅需要播放暂停控制的场景。
  • 方案4:滚动位置兜底
    输入框聚焦时记录当前页面滚动位置,监听页面scroll事件,若检测到非用户主动触发的回滚,直接调用window.scrollTo()重置到之前记录的位置。该方案会存在轻微的视觉跳动,仅作为兜底方案使用。

内容的提问来源于stack exchange,提问作者user3792322

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:15:03