当前位置:首页 > JavaScript

js实现标尺

2026-02-01 08:02:02JavaScript

实现标尺的 JavaScript 方法

使用 Canvas 绘制标尺

通过 HTML5 的 Canvas API 可以灵活绘制标尺,支持自定义刻度、颜色和方向。

const canvas = document.getElementById('rulerCanvas');
const ctx = canvas.getContext('2d');
const width = canvas.width;
const height = canvas.height;
const scale = 1; // 缩放比例
const unit = 'px'; // 单位

// 水平标尺
function drawHorizontalRuler() {
    ctx.clearRect(0, 0, width, height);
    ctx.strokeStyle = '#000';
    ctx.lineWidth = 1;

    // 绘制主刻度
    for (let i = 0; i < width; i += 50 * scale) {
        ctx.beginPath();
        ctx.moveTo(i, 0);
        ctx.lineTo(i, 15);
        ctx.stroke();
        ctx.fillText(i + unit, i + 2, 12);
    }

    // 绘制次刻度
    for (let i = 0; i < width; i += 10 * scale) {
        ctx.beginPath();
        ctx.moveTo(i, 0);
        ctx.lineTo(i, 8);
        ctx.stroke();
    }
}

使用 CSS 和 DOM 创建标尺

通过动态生成 DOM 元素和 CSS 样式实现轻量级标尺。

function createCSSRuler(containerId, orientation = 'horizontal') {
    const container = document.getElementById(containerId);
    const ruler = document.createElement('div');
    ruler.className = 'ruler ' + orientation;

    // 生成刻度
    for (let i = 0; i < 1000; i += 10) {
        const tick = document.createElement('div');
        tick.className = 'tick';
        if (i % 50 === 0) {
            tick.classList.add('major-tick');
            tick.textContent = i;
        }
        ruler.appendChild(tick);
    }

    container.appendChild(ruler);
}

对应 CSS 样式:

.ruler {
    position: relative;
    background: #f0f0f0;
    overflow: hidden;
}
.ruler.horizontal {
    height: 20px;
    width: 100%;
}
.tick {
    position: absolute;
    background: #999;
}
.horizontal .tick {
    width: 1px;
    height: 5px;
    bottom: 0;
}
.horizontal .major-tick {
    height: 10px;
}

使用 SVG 实现矢量标尺

SVG 方案适合需要缩放而不失真的场景。

function createSVGRuler(containerId, length = 500) {
    const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
    svg.setAttribute('width', length);
    svg.setAttribute('height', 20);

    for (let i = 0; i < length; i += 10) {
        const tick = document.createElementNS("http://www.w3.org/2000/svg", "line");
        tick.setAttribute('x1', i);
        tick.setAttribute('y1', 20);
        tick.setAttribute('x2', i);
        tick.setAttribute('y2', i % 50 === 0 ? 10 : 15);
        tick.setAttribute('stroke', '#000');
        svg.appendChild(tick);

        if (i % 50 === 0) {
            const text = document.createElementNS("http://www.w3.org/2000/svg", "text");
            text.setAttribute('x', i + 2);
            text.setAttribute('y', 8);
            text.textContent = i;
            svg.appendChild(text);
        }
    }

    document.getElementById(containerId).appendChild(svg);
}

响应式标尺实现

添加窗口大小变化的监听,动态调整标尺尺寸。

window.addEventListener('resize', () => {
    const ruler = document.querySelector('.ruler');
    if (ruler) {
        ruler.style.width = window.innerWidth + 'px';
        // 重新绘制刻度逻辑
    }
});

专业库推荐

对于复杂需求,可以考虑以下库:

js实现标尺

  • ruler.js:提供多种标尺样式和单位转换
  • fabric.js:在 Canvas 基础上提供更丰富的图形功能
  • D3.js:适合数据可视化场景的标尺实现

每种实现方式各有优劣:Canvas 适合高性能绘制,CSS 方案更轻量,SVG 则便于缩放。选择时应根据具体需求考虑性能、兼容性和功能复杂度。

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

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…