首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在可编辑的div上显示每行旁边的行号

在可编辑的div上显示每行旁边的行号,可以通过以下步骤实现:

  1. 首先,为可编辑的div创建一个父容器,并设置其样式为相对定位(position: relative),以便后续绝对定位的行号容器可以相对于该父容器进行定位。
  2. 在父容器中创建一个用于显示行号的容器,并设置其样式为绝对定位(position: absolute)。将该容器放置在可编辑div的左侧,可以使用left属性进行调整。
  3. 使用JavaScript监听可编辑div的滚动事件,以便在滚动时更新行号容器的位置。
  4. 在滚动事件的处理函数中,获取可编辑div的scrollTop属性,即滚动的垂直距离。根据scrollTop的值,计算当前可见区域的第一行和最后一行的行号。
  5. 将计算得到的行号填充到行号容器中,并设置合适的样式,例如字体大小、行高等。

以下是一个示例的代码实现:

HTML:

代码语言:txt
复制
<div class="editor-container">
  <div class="line-number-container"></div>
  <div contenteditable="true" class="editable-div"></div>
</div>

CSS:

代码语言:txt
复制
.editor-container {
  position: relative;
  display: flex;
}

.line-number-container {
  position: absolute;
  left: 0;
  top: 0;
  width: 30px; /* 调整宽度以适应行号的长度 */
  padding: 5px;
  font-family: monospace; /* 使用等宽字体以保持对齐 */
  background-color: #f0f0f0;
  border-right: 1px solid #ccc;
}

.editable-div {
  flex: 1;
  padding: 5px;
  font-family: monospace; /* 使用等宽字体以保持对齐 */
  border: 1px solid #ccc;
  overflow: auto;
}

JavaScript:

代码语言:txt
复制
const editableDiv = document.querySelector('.editable-div');
const lineNumberContainer = document.querySelector('.line-number-container');

editableDiv.addEventListener('scroll', updateLineNumbers);

function updateLineNumbers() {
  const scrollTop = editableDiv.scrollTop;
  const lineHeight = parseInt(getComputedStyle(editableDiv).lineHeight);
  const firstVisibleLine = Math.floor(scrollTop / lineHeight) + 1;
  const lastVisibleLine = firstVisibleLine + Math.floor(editableDiv.clientHeight / lineHeight) - 1;

  let lineNumbersHtml = '';
  for (let i = firstVisibleLine; i <= lastVisibleLine; i++) {
    lineNumbersHtml += `<div>${i}</div>`;
  }
  lineNumberContainer.innerHTML = lineNumbersHtml;
}

这样,当用户在可编辑的div中滚动时,行号容器会根据滚动位置动态更新显示的行号。你可以根据实际需求调整样式和布局。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券