&…">
当前位置:首页 > JavaScript

js 实现垂直标尺

2026-04-07 15:14:29JavaScript

实现垂直标尺的方法

使用HTML和CSS创建一个垂直标尺的基础结构。通过div元素定义标尺容器,利用CSS设置其样式和刻度线。

<div class="vertical-ruler"></div>
.vertical-ruler {
  position: relative;
  width: 30px;
  height: 300px;
  border-left: 1px solid #000;
  margin-left: 20px;
}

动态生成刻度线

通过JavaScript动态生成刻度线,使用循环创建不同长度的刻度线并定位。

const ruler = document.querySelector('.vertical-ruler');
const height = 300; // 标尺总高度
const interval = 10; // 刻度间隔

for (let i = 0; i <= height; i += interval) {
  const tick = document.createElement('div');
  tick.style.position = 'absolute';
  tick.style.left = '0';
  tick.style.bottom = `${i}px`;
  tick.style.width = i % 50 === 0 ? '20px' : '10px'; // 长刻度与短刻度
  tick.style.height = '1px';
  tick.style.backgroundColor = '#000';
  ruler.appendChild(tick);
}

添加刻度数值

为长刻度添加数值标签,增强标尺的可读性。

js 实现垂直标尺

for (let i = 0; i <= height; i += 50) {
  const label = document.createElement('div');
  label.style.position = 'absolute';
  label.style.left = '25px';
  label.style.bottom = `${i}px`;
  label.style.transform = 'translateY(50%)';
  label.style.fontSize = '12px';
  label.textContent = i;
  ruler.appendChild(label);
}

响应式调整标尺

通过监听窗口大小变化事件,动态调整标尺高度以适应不同屏幕尺寸。

function adjustRulerHeight() {
  const viewportHeight = window.innerHeight;
  ruler.style.height = `${viewportHeight * 0.8}px`;
}

window.addEventListener('resize', adjustRulerHeight);
adjustRulerHeight(); // 初始化时调用

自定义样式选项

通过CSS变量或JavaScript参数,允许自定义标尺的颜色、宽度和刻度间隔。

js 实现垂直标尺

.vertical-ruler {
  --ruler-color: #333;
  --tick-interval: 10px;
}
const customRuler = (options) => {
  const { color, interval } = options;
  const ticks = document.querySelectorAll('.vertical-ruler div');
  ticks.forEach(tick => {
    tick.style.backgroundColor = color;
  });
};

交互功能增强

为标尺添加拖拽或点击事件,使其能够与页面其他元素交互。

ruler.addEventListener('click', (e) => {
  const yPos = e.clientY - ruler.getBoundingClientRect().top;
  console.log(`Clicked at ${Math.round(yPos)}px`);
});

性能优化

对于高频更新的场景,使用requestAnimationFrame减少重绘开销。

function updateRuler() {
  requestAnimationFrame(() => {
    // 更新逻辑
  });
}

兼容性处理

确保代码在旧版本浏览器中正常运行,必要时添加Polyfill或降级方案。

if (!Element.prototype.append) {
  Element.prototype.append = function(...nodes) {
    nodes.forEach(node => this.appendChild(node));
  };
}

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

相关文章

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…