没有 JavaScript 计时器的自动播放轮播 - CSS 动画

这篇具有很好参考价值的文章主要介绍了没有 JavaScript 计时器的自动播放轮播 - CSS 动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

先看效果:
没有 JavaScript 计时器的自动播放轮播 - CSS 动画,CSS,css,javascript,css3
再看代码(查看更多):文章来源地址https://www.toymoban.com/news/detail-682244.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计时器</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }

        body {
            background: #98ede0;
            transition: background 500ms;
            font-family: ui-rounded, "Hiragino Maru Gothic ProN", Quicksand, Comfortaa, Manjari, "Arial Rounded MT", "Arial Rounded MT Bold", Calibri, source-sans-pro, sans-serif;
        }

        .content {
            margin: 0 auto;
            max-width: 500px;
            height: 100vh;
            height: 100svh;
            min-height: 400px;
            display: flex;
            flex-direction: column;
            padding: 40px 40px 80px;
            justify-content: center;
        }

        a {
            transition: color 200ms;
            color: rgba(0, 0, 0, 0.5);
            border-radius: 5px;
            text-decoration: none;
            margin: 40px auto 0;
        }
        a:hover {
            color: black;
            text-decoration: underline;
        }
        a:focus-visible {
            color: black;
            outline: 3px solid rgba(255, 255, 255, 0.3);
            outline-offset: 5px;
        }

        .pagination {
            display: flex;
            gap: 10px;
            height: 4px;
            min-height: 4px;
        }

        .pagination-item {
            border-radius: 100px;
            height: 100%;
            flex: auto;
            background: rgba(0, 0, 0, 0.08);
            overflow: hidden;
            border: 0;
            cursor: pointer;
        }

        @keyframes progress {
            from {
                width: 0;
            }
            to {
                width: 100%;
            }
        }
        .pagination-progress {
            flex: auto;
            background: #333;
            height: 100%;
            width: 0;
        }
        .pagination-item--running .pagination-progress {
            animation: progress 3s linear forwards;
        }
        .pagination-item--done .pagination-progress {
            width: 100%;
        }
        .pagination--paused .pagination-progress {
            animation-play-state: paused;
        }
        :-moz-window-inactive .pagination-progress {
            animation-play-state: paused;
        }

        .controls {
            display: flex;
            justify-content: center;
            gap: 12px;
        }

        .control {
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 100px;
            border: none;
            outline: none;
            height: 40px;
            flex: 40px 0 0;
            max-width: 100px;
            background: rgba(255, 255, 255, 0.3);
            transition: transform 200ms, background-color 200ms;
            will-change: transform, background-color;
            font-size: 20px;
        }
        .control:hover {
            cursor: pointer;
            transform: scale(1.15);
            background: rgba(255, 255, 255, 0.45);
        }
        .control:focus {
            background: rgba(255, 255, 255, 0.6);
        }

        .icon {
            width: 20px;
        }

        .icon--play {
            margin-right: -2px;
        }

        .pagination--paused ~ .controls .icon--pause,
        .pagination:not(.pagination--paused) ~ .controls .icon--play {
            display: none;
        }

        .state {
            font-size: 120px;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="content">

    <div class="pagination">
    </div>

    <div class="state">
        &nbsp;
    </div>

    <div class="controls">
        <button class="control control--prev" aria-label="Previous">
            <svg class="icon" viewBox="0 0 32 32">
                <path d="M20 28a1 1 0 0 1-.521-.146l-18-11a1.002 1.002 0 0 1 0-1.708l18-11A.999.999 0 0 1 21 5v6.11a1 1 0 0 1-.479.854L13.918 16l6.603 4.035c.297.182.479.506.479.854V27a1 1 0 0 1-1 1zM3.918 16 19 25.217V21.45l-7.521-4.596a1 1 0 0 1 0-1.707L19 10.55V6.783L3.918 16z" />
                <path d="M30 28a1 1 0 0 1-.521-.146l-18-11a1.002 1.002 0 0 1 0-1.708l18-11A.999.999 0 0 1 31 5v22a1 1 0 0 1-1 1zM13.918 16 29 25.217V6.783L13.918 16z" />
            </svg>
        </button>
        <button class="control control--play-pause" aria-label="Play/Pause">
            <svg class="icon icon--play" viewBox="0 0 32 32">
                <path d="M7 28a.999.999 0 0 1-1-1V5a1 1 0 0 1 1.521-.854l18 11a1.001 1.001 0 0 1 0 1.708l-18 11A1 1 0 0 1 7 28zM8 6.783v18.434L23.082 16 8 6.783z" />
            </svg>
            <svg class="icon icon--pause" viewBox="0 0 32 32">
                <path d="M13 28H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v22a1 1 0 0 1-1 1zm-5-2h4V6H8v20zM25 28h-6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v22a1 1 0 0 1-1 1zm-5-2h4V6h-4v20z" />
            </svg>
        </button>
        <button class="control control--next" aria-label="Next">
            <svg class="icon" viewBox="0 0 32 32">
                <path d="M12 28a1 1 0 0 1-1-1v-6.111c0-.348.182-.672.479-.854L18.082 16l-6.603-4.035A1.001 1.001 0 0 1 11 11.11V5a1 1 0 0 1 1.521-.854l18 11a1.002 1.002 0 0 1 0 1.708l-18 11A1 1 0 0 1 12 28zm1-6.55v3.767L28.082 16 13 6.783v3.767l7.521 4.596a1.001 1.001 0 0 1 0 1.708L13 21.45z" />
                <path d="M2 28a1 1 0 0 1-1-1V5a1 1 0 0 1 1.521-.854l18 11a1.002 1.002 0 0 1 0 1.708l-18 11A1 1 0 0 1 2 28zM3 6.783v18.434L18.082 16 3 6.783z" />
            </svg>
        </button>
    </div>

    <a target="_blank" href="https://blog.csdn.net/qq_35241329?type=blog">博客文章</a>
</div>
</body>
<script>
    "use strict";
    function getItem(index) {
        const item = document.createElement('button');
        item.classList.add('pagination-item');
        item.addEventListener('animationend', next);
        item.addEventListener('click', () => update(index));
        const progress = document.createElement('div');
        progress.classList.add('pagination-progress');
        item.appendChild(progress);
        return item;
    }
    function createItems(itemsCount) {
        const items = [];
        for (let i = 0; i < itemsCount; i++) {
            items.push(getItem(i));
        }
        return items;
    }
    function jumpTo(item) {
        if (isPaused) {
            item.classList.remove(classNames.RUNNING);
            item.classList.add(classNames.DONE);
        }
        else {
            item.classList.add(classNames.RUNNING);
            item.classList.remove(classNames.DONE);
        }
        let sibling = item;
        while ((sibling = sibling.previousSibling)) {
            sibling.classList.remove(classNames.RUNNING);
            sibling.classList.add(classNames.DONE);
        }
        sibling = item;
        while ((sibling = sibling.nextSibling)) {
            sibling.classList.remove(classNames.RUNNING, classNames.DONE);
        }
    }
    function update(index) {
        activeIndex = index;
        jumpTo(items[activeIndex]);
        // 更新幻灯片和背景颜色
        $state.innerHTML = activeIndex + 1;
        document.body.style.backgroundColor = colors[activeIndex];
    }
    function prev() {
        if (activeIndex > 0) {
            update(activeIndex - 1);
        }
    }
    function next() {
        if (activeIndex < ITEMS_COUNT - 1) {
            update(activeIndex + 1);
        }
    }
    function playPause() {
        $pagination.classList.toggle(classNames.PAUSED);
        isPaused = !isPaused;
        ///如果当前幻灯片已完成,跳到下一张
        if (!isPaused && items[activeIndex].classList.contains(classNames.DONE)) {
            next();
        }
    }
    const colors = ['#98ede0', '#74b9ff', '#a29bfe', '#fd79a8', '#ffeaa7'];
    const classNames = {
        RUNNING: 'pagination-item--running',
        DONE: 'pagination-item--done',
        PAUSED: 'pagination--paused',
    };
    let activeIndex = 0;
    let isPaused = false;
    const ITEMS_COUNT = 5;
    const items = createItems(ITEMS_COUNT);
    const $pagination = document.querySelector('.pagination');
    const $state = document.querySelector('.state');
    const $prev = document.querySelector('.control--prev');
    const $next = document.querySelector('.control--next');
    const $playPause = document.querySelector('.control--play-pause');
    $pagination.replaceChildren(...items);
    $prev.addEventListener('click', prev);
    $next.addEventListener('click', next);
    $playPause.addEventListener('click', playPause);
    update(activeIndex);

</script>
</html>

到了这里,关于没有 JavaScript 计时器的自动播放轮播 - CSS 动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF计时器功能

    本文实现WPF的计时器功能是通过system.timers.timer这个组件实现的。现在网上相关的资料有很多,我只是在自己的工作中刚好遇到要实现这个功能,中间也走了很多的弯路,不停的参考网上现有的资源,终于实现了基本的定时功能。希望本文可以帮助到您,让您花更少的时间来完

    2024年02月05日
    浏览(54)
  • 24秒计时器

    方案一:采用计数器(74LS192)作为核心部分。同时选择(74LS47)作为BCD码译码器来对7段数码显示管进行译码驱动,两个七段共阳数码显示管进行显示。采用计时器(NE555)制成的多谐振荡器,进行秒脉冲的输入。因为我们需要对其进行暂停、清零、报警和自动清零等控制,所

    2024年02月06日
    浏览(47)
  • RIP四大计时器

    RIP 计时器(以下均以华为 ensp 中信息为参考) 希望有需要的小伙伴可以参考参考,如有误解、请指正! 一、实验原理 1. 更新计时器( Update Timer ) Update time(更新时间):指运行RIP协议的路由器向其连接口广播自己的路由信息的时间间隔(用于更新RIP路由表信息),控制

    2024年02月03日
    浏览(47)
  • Qt实现计时器

    一、样图 二、代码 mainwidow.h mainwindow.cpp main.cpp ui_mainwindow.h

    2024年02月07日
    浏览(39)
  • 555计时器原理

    以Multisim上的555计时器为例: 图0.0 555计时器包含八个引脚 分别为: RST - Reset 复位引脚(低电平有效) DIS - Discharge 三极管集电极Collector输入引脚 THR - Threshold 上阈值电压引脚 TRI - Trigger 触发引脚 CON - Control voltage 1 电压控制引脚 OUT - Output 信号输出引脚 VCC GND 555定时器内部功能图

    2024年02月05日
    浏览(47)
  • java计时器

      在 Java中,我们有一个重要的概念:同步和异步。同步就是 Java中的线程安全,异步就是 Java中的线程非安全。 在使用 JVM时,我们一般都是用 start ()方法启动一个线程,然后设置时间,比如定时器,定时器是在某个指定的时间执行相应的任务。但是,在实际应用中,我们

    2023年04月18日
    浏览(62)
  • Verilog秒表计时器设计

    Verilog秒表计时器设计 设计一个基于Verilog的秒表计时器,该计时器可以在嵌入式系统中使用。下面是详细的设计说明和相应的源代码。 设计说明: 秒表计时器是一种常见的计时工具,可以用于测量时间间隔。在嵌入式系统中,我们可以使用Verilog语言来实现一个简单的秒表计

    2024年02月02日
    浏览(49)
  • STM32屏幕计时器

    显示屏显示计时时间,格式为 00:00:00 ,依次为 时:分:秒 ,程序运行之后自动计时,当按下按键,计时清零,按下按键采用外部中断。 调用lcd驱动代码让屏幕显示时间信息, 屏幕为SPI协议的128x128的LCD屏幕,查看原理图,找到对应接口 在STM32CubeMX中进行引脚配置 由于所调用的

    2024年02月09日
    浏览(45)
  • Spring计时器StopWatch

    StopWatch类是Spring框架中用于测量代码执行时间的工具类,它提供了一系列属性来记录监测信息。 本文基于spring-boot-starter-web:2.2.2RELEASE版本。 源码: 属性 描述 id 表示该StopWatch对象的唯一标识符,可以通过构造函数传入。 keepTaskList 表示是否保留所有记录的监测任务,,默认为

    2024年02月11日
    浏览(52)
  • qt学习:QTimer定时器+重复计时+单次计时

    在指定的间隔时间会发送出一个timeout信号,关联对应的槽函数 #includeQTimer

    2024年01月19日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包