当前位置:首页 > 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实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js 实现分页

js 实现分页

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

js图片轮播的实现

js图片轮播的实现

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

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…