当前位置:首页 > JavaScript

算盘js实现

2026-04-03 19:53:23JavaScript

算盘的JavaScript实现

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

初始化HTML结构

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

算盘js实现

<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实现珠子的点击或拖动功能。珠子移动时需要更新其位置和对应的数值。

算盘js实现

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);
}

扩展功能

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

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 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现延迟

js实现延迟

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

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…