当前位置:首页 > JavaScript

js 实现垂直标尺

2026-02-02 21:27:35JavaScript

实现垂直标尺的 JavaScript 方法

使用 HTML 和 CSS 创建一个容器元素,设置其高度和样式以形成标尺的外观。通过 JavaScript 动态生成刻度线。

js 实现垂直标尺

<div id="verticalRuler" style="position: relative; height: 500px; width: 30px; border-left: 1px solid black;"></div>
const ruler = document.getElementById('verticalRuler');
const height = ruler.offsetHeight;
const tickInterval = 10; // 像素间隔

for (let i = 0; i <= height; i += tickInterval) {
  const tick = document.createElement('div');
  tick.style.position = 'absolute';
  tick.style.left = '0';
  tick.style.top = `${i}px`;
  tick.style.width = i % 50 === 0 ? '15px' : '10px'; // 长刻度
  tick.style.height = '1px';
  tick.style.backgroundColor = 'black';
  ruler.appendChild(tick);

  if (i % 50 === 0) {
    const label = document.createElement('div');
    label.textContent = i;
    label.style.position = 'absolute';
    label.style.left = '20px';
    label.style.top = `${i}px`;
    label.style.fontSize = '10px';
    ruler.appendChild(label);
  }
}

使用 Canvas 绘制垂直标尺

利用 Canvas API 可以更灵活地绘制标尺,适合需要动态更新或复杂样式的场景。

js 实现垂直标尺

<canvas id="canvasRuler" width="50" height="500"></canvas>
const canvas = document.getElementById('canvasRuler');
const ctx = canvas.getContext('2d');
const height = canvas.height;
const tickInterval = 10;

ctx.strokeStyle = 'black';
ctx.lineWidth = 1;

for (let i = 0; i <= height; i += tickInterval) {
  const tickLength = i % 50 === 0 ? 15 : 10;
  ctx.beginPath();
  ctx.moveTo(0, i);
  ctx.lineTo(tickLength, i);
  ctx.stroke();

  if (i % 50 === 0) {
    ctx.font = '10px Arial';
    ctx.fillText(i.toString(), tickLength + 5, i + 3);
  }
}

响应式垂直标尺的实现

通过监听窗口大小变化事件,动态调整标尺的高度和刻度。

function createRuler() {
  const ruler = document.getElementById('verticalRuler');
  ruler.innerHTML = '';
  const height = window.innerHeight;
  ruler.style.height = `${height}px`;

  for (let i = 0; i <= height; i += 10) {
    const tick = document.createElement('div');
    tick.style.top = `${i}px`;
    ruler.appendChild(tick);
  }
}

window.addEventListener('resize', createRuler);
createRuler();

使用 SVG 实现垂直标尺

SVG 提供矢量图形支持,适合需要缩放或高精度显示的标尺。

<svg id="svgRuler" width="50" height="500" xmlns="http://www.w3.org/2000/svg">
</svg>
const svg = document.getElementById('svgRuler');
const height = 500;

for (let i = 0; i <= height; i += 10) {
  const tick = document.createElementNS('http://www.w3.org/2000/svg', 'line');
  tick.setAttribute('x1', '0');
  tick.setAttribute('y1', i);
  tick.setAttribute('x2', i % 50 === 0 ? '15' : '10');
  tick.setAttribute('y2', i);
  tick.setAttribute('stroke', 'black');
  svg.appendChild(tick);

  if (i % 50 === 0) {
    const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
    text.setAttribute('x', '20');
    text.setAttribute('y', i + 3);
    text.setAttribute('font-size', '10');
    text.textContent = i;
    svg.appendChild(text);
  }
}

以上方法可以根据具体需求选择,HTML/CSS 适合简单静态标尺,Canvas 和 SVG 适合动态或复杂样式场景。

标签: 标尺js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…