当前位置:首页 > JavaScript

算盘js实现

2026-04-03 19:53:23JavaScript

算盘的JavaScript实现

算盘是一种古老的计算工具,通过JavaScript可以模拟其基本功能。以下是实现一个简单算盘的关键步骤和代码示例。

初始化HTML结构

创建一个基本的HTML结构,包含算盘的框架和珠子。使用<div>元素表示算盘的横梁和珠子。

<div id="abacus">
  <div class="beam"></div>
  <div class="rod" id="rod1">
    <div class="upper-bead" data-value="5"></div>
    <div class="lower-bead" data-value="1"></div>
  </div>
  <!-- 更多 rods... -->
</div>

添加CSS样式

为算盘和珠子添加样式,使其看起来更接近真实的算盘。珠子需要绝对定位以便拖动。

#abacus {
  width: 500px;
  height: 200px;
  position: relative;
  background: #8B4513;
}
.beam {
  width: 100%;
  height: 10px;
  background: #000;
  position: absolute;
  top: 50px;
}
.rod {
  width: 50px;
  height: 150px;
  position: absolute;
  border-left: 1px solid #000;
}
.upper-bead, .lower-bead {
  width: 40px;
  height: 20px;
  background: #FF0000;
  position: absolute;
  cursor: pointer;
}

实现珠子交互逻辑

使用JavaScript实现珠子的点击或拖动功能。珠子移动时需要更新其位置和对应的数值。

document.querySelectorAll('.upper-bead, .lower-bead').forEach(bead => {
  bead.addEventListener('mousedown', function(e) {
    const rod = this.parentElement;
    const isUpper = this.classList.contains('upper-bead');
    const startY = e.clientY;

    function moveBead(e) {
      const deltaY = e.clientY - startY;
      const newY = Math.min(Math.max(deltaY, isUpper ? -20 : 0), isUpper ? 0 : 30);
      this.style.transform = `translateY(${newY}px)`;
    }

    function releaseBead() {
      document.removeEventListener('mousemove', moveBead);
      document.removeEventListener('mouseup', releaseBead);
      updateTotal();
    }

    document.addEventListener('mousemove', moveBead.bind(this));
    document.addEventListener('mouseup', releaseBead);
  });
});

计算当前数值

根据珠子的位置计算当前算盘表示的数字。每个珠子的位置对应不同的数值。

function updateTotal() {
  let total = 0;
  document.querySelectorAll('.rod').forEach(rod => {
    const upperBead = rod.querySelector('.upper-bead');
    const lowerBead = rod.querySelector('.lower-bead');

    const upperValue = parseInt(upperBead.dataset.value);
    const lowerValue = parseInt(lowerBead.dataset.value);

    const upperActive = upperBead.style.transform.includes('0px');
    const lowerActive = !lowerBead.style.transform || lowerBead.style.transform.includes('30px');

    total += (upperActive ? 0 : upperValue) + (lowerActive ? lowerValue : 0);
  });
  console.log('Total:', total);
}

扩展功能

可以添加更多功能,如重置算盘、保存当前状态或支持更多位数的计算。以下是一个重置功能的示例:

算盘js实现

function resetAbacus() {
  document.querySelectorAll('.upper-bead').forEach(bead => {
    bead.style.transform = 'translateY(-20px)';
  });
  document.querySelectorAll('.lower-bead').forEach(bead => {
    bead.style.transform = '';
  });
  updateTotal();
}

通过以上步骤,可以实现一个基本的交互式算盘。根据需求可以进一步优化样式和交互方式。

标签: 算盘js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…