You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为只读input标签添加闪烁光标?适配最新Chrome浏览器

解决readonly输入框安卓Chrome下有闪烁光标且禁用虚拟键盘的方案

嘿,这个需求我刚好踩过坑!要让设置了readonly的输入框在安卓Chrome中选中时显示闪烁光标,同时不弹出虚拟键盘,这里有两个适配最新版Chrome的可靠方案:

方案一:CSS模拟闪烁光标(无需JS)

核心思路是利用CSS伪元素模拟原生光标,同时依赖readonly属性本身阻止虚拟键盘弹出(安卓Chrome中readonly输入框聚焦时不会唤起键盘)。

代码示例:

<input id="input" type="text" value="0" readonly="true">
#input {
  position: relative;
  /* 确保输入框可以被聚焦选中 */
  cursor: text;
}

/* 聚焦时显示模拟光标 */
#input:focus::after {
  content: '';
  position: absolute;
  /* 根据输入框内边距调整位置,这里是示例值 */
  left: calc(10px + 0.5em);
  top: 50%;
  transform: translateY(-50%);
  width: 2px;
  height: 70%;
  background-color: #000;
  /* 模拟光标闪烁动画 */
  animation: blink-caret 1s step-end infinite;
}

@keyframes blink-caret {
  from, to { opacity: 1; }
  50% { opacity: 0; }
}

注意事项:

  • 调整left值适配你的输入框内边距和字体大小,确保光标位置和原生一致
  • 如果输入框内容长度变化,可能需要动态调整光标位置(此时可以结合JS计算)

方案二:保留原生光标(JS辅助)

如果想要原生光标体验,可以去掉readonly属性,通过JS阻止输入行为和键盘唤起,同时保留聚焦和光标:

代码示例:

<input id="input" type="text" value="0">
const inputEl = document.getElementById('input');

// 阻止键盘事件,避免弹出虚拟键盘
inputEl.addEventListener('keydown', (e) => {
  e.preventDefault();
});

// 阻止粘贴行为,保持内容只读
inputEl.addEventListener('paste', (e) => {
  e.preventDefault();
});

// 阻止输入修改,确保内容始终为初始值
inputEl.addEventListener('input', (e) => {
  e.target.value = '0';
});

// 可选:允许用户选中内容但不能修改
inputEl.addEventListener('selectstart', (e) => {
  // 允许选中,无需阻止
});

优势:

  • 完全使用原生光标,适配系统主题的光标样式(比如深色模式)
  • 无需调整CSS光标位置,更贴合原生体验

这两个方案在最新版Chrome(100+版本)下都能完美适配安卓端,你可以根据需求选择~

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

火山引擎 最新活动