javascript - 修改这个漂亮的数字代码

标签 javascript html css

这是一个漂亮的数字收报机。一整天我都在想并尝试修改代码以使其成为我想要的但直到现在都没有成功!

如果您使用具有两位或更多位数字的数字,则代码会创建单独的黑色方 block 来保存每个数字(运行代码片段以查看),但我只需要一个方 block 作为容器来保存多位数字。因此,如果我们有一个像 10 这样的两位数,则 Number Ticker 应该是这样的:

enter image description here

下一步应该是这样的:

enter image description here

我不想要像这样移动两位数的那些并行动画(只需要单个动画,不需要两个):

enter image description here

代码如下:

let counters = document.getElementsByClassName('number-ticker');

let defaultDigitNode = document.createElement('div');
defaultDigitNode.classList.add('digit');

for (let i = 0; i < 11; i++) {
  defaultDigitNode.innerHTML += i + '<br>';
}

[].forEach.call(counters, function(counter) {
  let currentValue = 10;
  let digits = [];

  generateDigits(currentValue.toString().length);
  setValue(currentValue);

  setTimeout(function() {
    setValue(8);
  }, 2000);

  setTimeout(function() {
    setValue(7);
  }, 5000);

  function setValue(number) {
    let s = number.toString().split('').reverse().join('');
    let l = s.length;

    if (l > digits.length) {
      generateDigits(l - digits.length);
    }

    for (let i = 0; i < digits.length; i++) {
      setDigit(i, s[i] || 0);
    }
  }

  function setDigit(digitIndex, number) {
    digits[digitIndex].style.marginTop = '-' + number + 'em';
  }

  function generateDigits(amount) {
    for (let i = 0; i < amount; i++) {
      let d = defaultDigitNode.cloneNode(true);
      counter.appendChild(d);
      digits.unshift(d);
    }
  }
});
:root {
  background-color: #555;
  color: white;
  font-size: 25vh;
  font-family: Roboto Light;
}

body,
html {
  margin: 0;
  height: 100%;
}

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
}

.number-ticker {
  overflow: hidden;
  height: 1em;
  background-color: #333;
  box-shadow: 0 0 0.05em black inset;
}

.number-ticker .digit {
  float: left;
  line-height: 1;
  transition: margin-top 1.75s ease;
  border-right: 1px solid #555;
  padding: 0 0.075em;
}
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>Number Ticker</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <link rel="stylesheet" href="number-ticker.css">
</head>

<body>
  <div class="container">
    <div class="number-ticker" data-value="0"></div>
  </div>

  <script src="number-ticker.js"></script>
</body>

</html>

最佳答案

你的CSS有这个

.number-ticker .digit {
  float: left;
  line-height: 1;
  transition: margin-top 1.75s ease;
  border-right: 1px solid #555;
  padding: 0 0.075em;
}

你需要改成这样

 .number-ticker .digit {
     float: left;
     line-height: 1;
     transition: margin-top 1.75s ease;
     padding: 0 0.075em;
   text-align: center;
}

如果你删除 border-right: 1px solid #555 你会得到它看起来像 1 个盒子。

我还添加了 text-align: center 使数字居中。

希望这能解决您的问题:)

关于javascript - 修改这个漂亮的数字代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58799459/

相关文章:

javascript - 如何单独传递ajax调用参数

javascript - 在 ipad 中打开时网站会缩放。点击某些按钮时也会放大更多

javascript - 服务器无响应时如何处理ajax调用

javascript - 如何使 <span> 元素成为表单中的常规制表位?

python - 使用 Selenium 提取元素的 CSS 选择器

javascript - React 如何申请`componentDidMount()

javascript - 从 Firebase 集合中查询数据

javascript - 自定义函数返回正确的结果,但也未定义。这是为什么?

html - 摆脱粘性页脚附带的垂直滚动条

html - li 和 border 之间的空白