郭某人的网站

关于 / 留言

WEB 前端实现数字滚动拨盘的动画效果

网页中数字上下滚动的动画


现代网页的设计常以友好的动态视觉效果为优,我就经常见到在各种主流的 APP 中开发人员都对变化频率高的数字部分做出了像是以前那种上下的拨轮数字转盘效果,网页中用这种效果的并不算多,此篇文章贴出我在网页中模拟实现此种效果的代码,先看看下面的动图效果:

实现思路是为每个数字都做个从 0 ~ 9 的长条,只展示出够 1 个数字显示的区域,其它的则隐藏,变化数字时使用 CSS transform 逻辑使其垂直位移并配以过渡动画,下面是完整的页面代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        #div_container {
            display: flex;
        }
 
        .DIV_numbers_box {
            font-size: 3em;
            height: 3em;
            margin: 0 .1em 0 0;
            overflow: hidden;
        }
 
        .DIV_numbers_scroller {
            height: 100%;
            transition: transform 1s;
            transform: translateY(0%);
        }
 
            .DIV_numbers_scroller > span {
                display: flex;
                height: 100%;
                justify-content: center;
                flex-direction: column;
            }
    </style>
</head>
<body>
    <div id="div_container">
        <div id="div_numbers1" class="DIV_numbers_box" data-number="1">
            <div class="DIV_numbers_scroller">
                <span>0</span>
                <span>1</span>
                <span>2</span>
                <span>3</span>
                <span>4</span>
                <span>5</span>
                <span>6</span>
                <span>7</span>
                <span>8</span>
                <span>9</span>
            </div>
        </div>
        <div id="div_numbers2" class="DIV_numbers_box" data-number="2">
            <div class="DIV_numbers_scroller">
                <span>0</span>
                <span>1</span>
                <span>2</span>
                <span>3</span>
                <span>4</span>
                <span>5</span>
                <span>6</span>
                <span>7</span>
                <span>8</span>
                <span>9</span>
            </div>
        </div>
        <div id="div_numbers3" class="DIV_numbers_box" data-number="3">
            <div class="DIV_numbers_scroller">
                <span>0</span>
                <span>1</span>
                <span>2</span>
                <span>3</span>
                <span>4</span>
                <span>5</span>
                <span>6</span>
                <span>7</span>
                <span>8</span>
                <span>9</span>
            </div>
        </div>
    </div>
    <button type="button" onclick="RandomSet()">随机设 3 个数</button>
    <script>
        function GetRandomInt(_start, _end) {
            var x = _end - _start;
            var num = Math.random() * x + _start;
            return parseInt(num, 10);
        }
        function SetNumbers(selector, number) {
            var div_number_box = document.querySelector(selector)
            var new_percent_translateY = -number * 100
            div_number_box.children[0].style.transform = "translateY(" + new_percent_translateY + "%)"
            div_number_box.dataset.number = number
        }
        function RandomSet() {
            var number1 = GetRandomInt(0, 10)
            var number2 = GetRandomInt(0, 10)
            var number3 = GetRandomInt(0, 10)
            SetNumbers("#div_numbers1", number1)
            SetNumbers("#div_numbers2", number2)
            SetNumbers("#div_numbers3", number3)
        }
        RandomSet()
    </script>
</body>
</html>

我总结的一些问题点:

  • 可开发性不友好,操作数字只能一个一个来;
  • 不利于页面结构的解析,比如会影响页面扫描程序,增加爬虫类程序的解析工作;
  • 会影响浏览器默认的交互方式,比如用户选择这些数字时会出现意料之外的结果;
  • 页面第一次加载时如果立刻设置数字的话会没有过渡动画效果。

最后更新时间:2025/05/11 13:22

要是赏点零花钱给我,那我们还是朋友...

注意!你的赞赏转账请考虑再三后支付,此收款不作任何形式的退款。