当前位置:首页 > JavaScript

js实现标尺

2026-04-06 00:35:03JavaScript

实现标尺的 JavaScript 方法

使用 Canvas 绘制标尺

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

js实现标尺

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 快速实现。

js实现标尺

<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();
  }
});

添加交互功能

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

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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现vue

js实现vue

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

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js怎么实现异步

js怎么实现异步

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