当前位置:首页 > 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
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…