当前位置:首页 > JavaScript

js实现标尺

2026-04-06 00:35:03JavaScript

实现标尺的 JavaScript 方法

使用 Canvas 绘制标尺

通过 HTML5 Canvas 绘制标尺,适合需要自定义样式和交互的场景。

const canvas = document.getElementById('rulerCanvas');
const ctx = canvas.getContext('2d');
const scale = 1; // 缩放比例
const startX = 50; // 起始位置

function drawRuler() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.strokeStyle = '#000';
  ctx.lineWidth = 1;

  // 绘制标尺基线
  ctx.beginPath();
  ctx.moveTo(0, 30);
  ctx.lineTo(canvas.width, 30);
  ctx.stroke();

  // 绘制刻度
  for (let i = 0; i < canvas.width; i += 10 * scale) {
    ctx.beginPath();
    ctx.moveTo(startX + i, 30);
    ctx.lineTo(startX + i, i % 50 === 0 ? 10 : 20);
    ctx.stroke();

    // 添加刻度数字
    if (i % 50 === 0) {
      ctx.font = '10px Arial';
      ctx.fillText(i/scale, startX + i - 5, 8);
    }
  }
}
drawRuler();

使用 CSS 和 DOM 实现简单标尺

适用于轻量级需求,通过 HTML 和 CSS 快速实现。

<div class="ruler">
  <div class="cm"></div>
  <div class="mm"></div>
</div>

<style>
.ruler {
  position: relative;
  height: 30px;
  border-bottom: 1px solid #000;
}
.cm::before {
  content: attr(data-value);
  position: absolute;
  bottom: 15px;
  font-size: 10px;
}
.mm {
  position: absolute;
  bottom: 0;
  height: 5px;
  border-left: 1px solid #000;
}
</style>

<script>
const ruler = document.querySelector('.ruler');
for (let i = 0; i < 100; i++) {
  const mm = document.createElement('div');
  mm.className = 'mm';
  mm.style.left = `${i * 10}px`;
  ruler.appendChild(mm);

  if (i % 10 === 0) {
    const cm = document.createElement('div');
    cm.className = 'cm';
    cm.setAttribute('data-value', i/10);
    cm.style.left = `${i * 10 - 5}px`;
    ruler.appendChild(cm);
  }
}
</script>

响应式标尺实现

添加窗口大小变化时的自适应处理。

window.addEventListener('resize', () => {
  if (canvas) {
    canvas.width = window.innerWidth;
    drawRuler();
  }
});

添加交互功能

实现标尺拖拽和缩放功能。

js实现标尺

let isDragging = false;
let lastX = 0;

canvas.addEventListener('mousedown', (e) => {
  isDragging = true;
  lastX = e.clientX;
});

canvas.addEventListener('mousemove', (e) => {
  if (isDragging) {
    startX += e.clientX - lastX;
    lastX = e.clientX;
    drawRuler();
  }
});

canvas.addEventListener('mouseup', () => {
  isDragging = false;
});

canvas.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01;
  scale = Math.min(Math.max(0.1, scale), 4);
  drawRuler();
});

注意事项

  • 对于高性能场景建议使用 Canvas
  • 需要精确测量时注意设备像素比处理
  • 移动端需添加 touch 事件支持
  • 复杂项目可考虑使用第三方库如 Ruler.js

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

相关文章

js实现vue

js实现vue

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js怎么实现异步

js怎么实现异步

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

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…