day15-Incrementing counter(平台关注量计数动态显示)

50 天学习 50 个项目 - HTMLCSS and JavaScript

day15-Incrementing counter(平台关注量计数动态显示)

效果

在这里插入图片描述
在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- 引入图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"
        integrity="sha512-1PKOgIY59xJ8Co8+NE6FZ+LOAZKjy+KY8iq0G4B3CyeY6wYHN3yt9PW0XpSriVlkMXe40PTKnXrLnZ9+fkDaog=="
        crossorigin="anonymous" />
    <title>Increment Counter</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
    <!-- 每一项 -->
    <div class="counter-container">
        <!-- 图标 -->
        <i class="fab fa-twitter fa-3x"></i>
        <!-- 数量 -->
        <div class="counter" data-target="18000"></div>
        <!-- 文本 -->
        <span>Twitter Followers</span>
    </div>
    <!-- 每一项 -->
    <div class="counter-container">
        <i class="fab fa-youtube fa-3x"></i>
        <div class="counter" data-target="6000"></div>
        <span>YouTube Subscribers</span>
    </div>
    <!-- 每一项 -->
    <div class="counter-container">
        <i class="fab fa-facebook fa-3x"></i>
        <div class="counter" data-target="9500"></div>
        <span>Facebook Fans</span>
    </div>
    <script src="script.js"></script>
</body>

</html>

style.css

@import url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');

/* 引入字体 */
* {
    box-sizing: border-box;
}

body {
    background-image: linear-gradient(to right,
            skyblue,
            lightblue);
    color: #fff;
    font-family: 'Roboto Mono', sans-serif;
    /* 居中显示 */
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
}

/* 每一项 */
.counter-container {
    /* 居中对齐 */
    display: flex;
    flex-direction: column;
    text-align: center;
    margin: 30px 50px;
}

/* 计数 */
.counter {
    font-size: 60px;
    margin-top: 10px;
}

/* 字体图标 阴影 */
.fab {
    text-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
}

/* 媒体查询 <=580px,时三项竖直排列 */
@media (max-width: 580px) {
    body {
        flex-direction: column;
    }
}

script.js

// 重点是 flex 函数  定时器 自定义属性的应用

// 1.获取元素节点
const counters = document.querySelectorAll('.counter');//数量显示
// 2.
counters.forEach(counter => {
    counter.innerText = '0'
    // 动态显示数量的变化
    const updateCounter = () => {
        // 从计数器的属性 data-target 中获取目标值,并将其转换为数字类型。
        const target = +counter.getAttribute('data-target')
        // 获取当前计数器的文本内容,并将其转换为数字类型。
        const c = +counter.innerText
        // 计算每次增加的增量值,通过将目标值除以 200 来获得平均每次增加的数量。
        const increment = target / 200
        // 如果当前值<目标值
        if (c < target) {
            // 如果当前计数器的值小于目标值,则将计数器的文本内容设置为当前值加上增量值,
            counter.innerText = `${Math.ceil(c + increment)}`
            // 并通过 setTimeout 函数延迟 1 毫秒后再次调用 updateCounter 函数,实现动态更新的效果。
            setTimeout(updateCounter, 1)
        } else {
            counter.innerText = target
        }
    }
    // 调用
    updateCounter()
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值