当前位置:首页 > JavaScript

js实现尺子

2026-04-06 12:06:59JavaScript

实现尺子功能的核心思路

在JavaScript中实现尺子功能通常需要结合HTML5的Canvas绘图API或CSS布局。尺子可以用于测量网页元素、展示刻度或辅助设计。以下是两种常见的实现方式:

基于Canvas的刻度尺实现

使用Canvas绘制动态刻度尺,适合需要高精度或自定义样式的场景:

const canvas = document.getElementById('rulerCanvas');
const ctx = canvas.getContext('2d');
const width = 800; // 尺子宽度
const height = 50; // 尺子高度

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

    // 绘制主刻度线
    for (let i = 0; i <= width; i += 50) {
        ctx.beginPath();
        ctx.moveTo(i, 0);
        ctx.lineTo(i, 20);
        ctx.stroke();
        ctx.fillText(i + 'px', i - 10, 35);
    }

    // 绘制次刻度线
    for (let i = 0; i <= width; i += 10) {
        if (i % 50 !== 0) {
            ctx.beginPath();
            ctx.moveTo(i, 0);
            ctx.lineTo(i, 10);
            ctx.stroke();
        }
    }
}

基于CSS的水平尺子实现

使用纯CSS和HTML创建静态尺子,适合简单测量场景:

<div class="ruler">
    <div class="cm"></div>
    <div class="cm"></div>
    <!-- 重复刻度 -->
</div>

<style>
.ruler {
    display: flex;
    height: 30px;
    background: #f5f5f5;
    border-top: 1px solid #999;
}
.cm {
    width: 50px;
    border-left: 1px solid #333;
    position: relative;
}
.cm::after {
    content: attr(data-value);
    position: absolute;
    bottom: -20px;
    left: -10px;
}
</style>

动态交互式尺子实现

结合鼠标事件实现可拖动的测量工具:

document.addEventListener('mousedown', startMeasuring);
document.addEventListener('mousemove', measure);
document.addEventListener('mouseup', endMeasuring);

let startX, ruler;

function startMeasuring(e) {
    startX = e.clientX;
    ruler = document.createElement('div');
    ruler.style.position = 'absolute';
    ruler.style.height = '100vh';
    ruler.style.width = '1px';
    ruler.style.background = 'red';
    ruler.style.left = startX + 'px';
    document.body.appendChild(ruler);
}

function measure(e) {
    if (!ruler) return;
    const currentX = e.clientX;
    const distance = Math.abs(currentX - startX);
    ruler.style.width = distance + 'px';
}

function endMeasuring() {
    if (ruler) document.body.removeChild(ruler);
    ruler = null;
}

实现注意事项

  1. 性能优化:频繁的DOM操作或Canvas重绘会影响性能,建议使用requestAnimationFrame进行节流

  2. 响应式设计:需要监听窗口resize事件重新计算刻度位置

  3. 单位转换:可根据需求实现像素、厘米、英寸等单位的切换公式:

    • 1英寸 = 96像素
    • 1厘米 = 37.8像素
  4. 跨浏览器兼容:不同浏览器对Canvas文本渲染的支持度不同,可能需要添加polyfill

    js实现尺子

以上方法可根据具体需求组合使用,例如用Canvas绘制刻度,再用DOM实现交互功能。

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

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…