Jadual Kandungan
末尾填充头部第一组数据
横向无限轮播
轮播图?不在话下
Rumah hujung hadapan web tutorial css Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen!

Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen!

Jun 10, 2022 pm 01:00 PM
css javascript css3 animasi hujung hadapan

Bagaimana untuk mencipta karusel teks dan karusel imej? Perkara pertama yang semua orang fikirkan ialah sama ada untuk menggunakan js Malah, karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen. Saya harap ia akan membantu semua orang.

Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen!

Hari ini, saya ingin berkongsi satu teknik animasi yang boleh digunakan dalam perniagaan sebenar. [Pembelajaran yang disyorkan: tutorial video css]

Mahir menggunakan animasi bingkai demi bingkai dan animasi tween untuk mencapai kesan karusel gelung tak terhingga, seperti ini:

Melihat gambarajah di atas, beberapa pelajar tidak dapat mengelak daripada bertanya, bukankah ini animasi anjakan yang sangat mudah?

Mari kita buat analisis mudah Pada zahirnya, nampaknya hanya transform: translate() elemen yang beralih, tetapi perhatikan , terdapat dua kesukaran di sini:

<. . yang terakhir apabila anda perlu menghidupkan untuk memotong elemen pertama style="list-style-type: disc;">
  • di sini, anda boleh menjeda dan memikirkannya Jika terdapat 20 elemen, anda perlu melakukan siaran karusel tak terhingga yang serupa . Gunakan CSS untuk melaksanakannya, bagaimana anda melakukannya?
  • Animasi bingkai demi bingkai mengawal pensuisan keseluruhan

    Pertama sekali, saya perlu menggunakan kesan animasi bingkai demi bingkai, juga dikenali sebagai
  • fungsi pelonggaran langkah, yang menggunakan

    , langkah-langkahnya, sintaksnya adalah seperti berikut:

    Jika anda tidak tahu banyak tentang sintaks

    , saya amat mengesyorkan anda membaca artikel ini saya dahulukan - Penjelasan ringkas tentang animasi CSS, yang membantu untuk memahami Artikel ini memainkan peranan penting. Baiklah, mari kita berpegang pada contoh pada permulaan artikel Katakan kita mempunyai struktur HTML ini: animation-timing-function

    {
        /* Keyword values */
        animation-timing-function: step-start;
        animation-timing-function: step-end;
        /* Function values */
        animation-timing-function: steps(6, start)
        animation-timing-function: steps(4, end);
    }
    Salin selepas log masuk
    Pertama, kami melaksanakan susun atur yang begitu mudah:

    steps

    <div class="g-container">
      <ul>
        <li>Lorem ipsum 1111111</li>
        <li>Lorem ipsum 2222222</li>
        <li>Lorem ipsum 3333333</li>
        <li>Lorem ipsum 4444444</li>
        <li>Lorem ipsum 5555555</li>
        <li>Lorem ipsum 6666666</li>
      </ul>
    </div>
    Salin selepas log masuk
    Di sini, untuk mencapai kesan karusel dan sebarang nombor, kita boleh menggunakan

    :

    Jangan lihat berapa banyak di atas Ia mengelirukan untuk menggunakan pembolehubah CSS, tetapi ia sebenarnya mudah difahami:

    animation-timing-function: steps(): penggunaan masa animasi tunggal * bilangan karusel, iaitu, jumlah tempoh animasi

    :root {
      // 轮播的个数
      --s: 6;
      // 单个 li 容器的高度
      --h: 36;
      // 单次动画的时长
      --speed: 1.5s;
    }
    .g-container {
      width: 300px;
      height: calc(var(--h) * 1px);
    }
    ul {
      display: flex;
      flex-direction: column;
      animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;
    }
    ul li {
      width: 100%;
    }
    @keyframes move {
      0% {
        transform: translate(0, 0);
      }
      100% {
        transform: translate(0, calc(var(--s) * var(--h) * -1px));
      }
    }
    Salin selepas log masuk

      ialah bilangan bingkai animasi bingkai demi bingkai, berikut ialah
    • , yang mudah difahami

      calc(var(--speed) * var(--s))

      Ketinggian bekas li tunggal* Bilangan karusel sebenarnya ialah ketinggian keseluruhan ul, yang digunakan untuk menetapkan nilai akhir animasi bingkai demi bingkai
    • steps(var(--s))Kesan di atas sebenarnya seperti berikut: steps(6)

    • calc(var(--s) * var(--h) * -1px))

      Jika anda menambah
    • pada bekas, ini adalah kesannya:

    Dengan cara ini, kita Struktur keseluruhan diperolehi Sekurang-kurangnya, keseluruhan kesan adalah bulat.

    Tetapi memandangkan ia hanya animasi bingkai demi bingkai, anda hanya boleh melihat penukaran, tetapi tiada kesan animasi peralihan antara setiap bingkai. Jadi, seterusnya, kita perlu memperkenalkan animasi tweening. overflow: hidden

    Gunakan animasi tweening untuk bertukar antara dua set data

    Kita perlu menggunakan animasi tweening untuk mencapai kesan penukaran dinamik. Langkah ini sebenarnya sangat mudah. ​​Apa yang perlu kita lakukan ialah menggunakan

    untuk memindahkan satu set data dari keadaan A ke keadaan B.

    Jika anda mengambil satu untuk demonstrasi sahaja, kod anggarannya adalah seperti berikut:

    Animasi yang sangat mudah:

    transform

    Berdasarkan kesan di atas, jika kita menggabungkan
    <div class="g-container">
      <ul style="--s: 6">
        <li>Lorem ipsum 1111111</li>
        <li>Lorem ipsum 2222222</li>
        <li>Lorem ipsum 3333333</li>
        <li>Lorem ipsum 4444444</li>
        <li>Lorem ipsum 5555555</li>
        <li>Lorem ipsum 6666666</li>
      </ul>
    </div>
    Salin selepas log masuk
    animasi bingkai demi bingkai
    :root {
      --h: 36;
      --speed: 1.2s;
    }
    ul li {
      height: 36px;
      animation: liMove calc(var(--speed)) infinite;
    }
    @keyframes liMove {
      0% {
        transform: translate(0, 0);
      }
      80%,
      100%  {
        transform: translate(0, -36px);
      }
    }
    Salin selepas log masuk
    yang dinyatakan pada permulaan dengan

    animasi tween

    di sini, keseluruhannya pergerakan ul, dan Susun pergerakan individu li bersama-sama:

    Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen! untuk mendapatkan kesan seperti ini:

    Wah, menakjubkan Satu tindak balas kimia berlaku! Berdasarkan gabungan

    animasi bingkai demi bingkai
    :root {
      // 轮播的个数
      --s: 6;
      // 单个 li 容器的高度
      --h: 36;
      // 单次动画的时长
      --speed: 1.5s;
    }
    .g-container {
      width: 300px;
      height: calc(var(--h) * 1px);
    }
    ul {
      display: flex;
      flex-direction: column;
      animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;
    }
    ul li {
      width: 100%;
      animation: liMove calc(var(--speed)) infinite;
    }
    @keyframes move {
      0% {
        transform: translate(0, 0);
      }
      100% {
        transform: translate(0, calc(var(--s) * var(--h) * -1px));
      }
    }
    @keyframes liMove {
      0% {
        transform: translate(0, 0);
      }
      80%,
      100%  {
        transform: translate(0, calc(var(--h) * -1px));
      }
    }
    Salin selepas log masuk
    dan

    animasi tween

    , kami hampir mencapai kesan karusel.

    当然,有一点瑕疵,可以看到,最后一组数据,是从第六组数据 transform 移动向了一组空数据:

    末尾填充头部第一组数据

    实际开发过轮播的同学肯定知道,这里,其实也很好处理,我们只需要在末尾,补一组头部的第一个数据即可:

    改造下我们的 HTML:

    <div class="g-container">
      <ul>
        <li>Lorem ipsum 1111111</li>
        <li>Lorem ipsum 2222222</li>
        <li>Lorem ipsum 3333333</li>
        <li>Lorem ipsum 4444444</li>
        <li>Lorem ipsum 5555555</li>
        <li>Lorem ipsum 6666666</li>
        <!--末尾补一个首条数据-->
        <li>Lorem ipsum 1111111</li>
      </ul>
    </div>
    Salin selepas log masuk

    这样,我们再看看效果:

    Beautiful!如果你还有所疑惑,我们给容器加上 overflow: hidden,实际效果如下,通过额外添加的最后一组数据,我们的整个动画刚好完美的衔接上,一个完美的轮播效果:

    完整的代码,你可以戳这里:CodePen Demo -- Vertical Infinity Loop

    https://codepen.io/Chokcoco/pen/RwQVByx

    横向无限轮播

    当然,实现了竖直方向的轮播,横向的效果也是一样的。

    并且,我们可以通过在 HTML 结构中,通过 style 内填写 CSS 变量值,传入实际的 li 个数,以达到根据不同 li 个数适配不同动画:

    <div class="g-container">
      <ul style="--s: 6">
        <li>Lorem ipsum 1111111</li>
        <li>Lorem ipsum 2222222</li>
        <li>Lorem ipsum 3333333</li>
        <li>Lorem ipsum 4444444</li>
        <li>Lorem ipsum 5555555</li>
        <li>Lorem ipsum 6666666</li>
        <!--末尾补一个首尾数据-->
        <li>Lorem ipsum 1111111</li>
      </ul>
    </div>
    Salin selepas log masuk

    整个动画的 CSS 代码基本是一致的,我们只需要改变两个动画的 transform 值,从竖直位移,改成水平位移即可:

    :root {
      --w: 300;
      --speed: 1.5s;
    }
    .g-container {
      width: calc(--w * 1px);
      overflow: hidden;
    }
    ul {
      display: flex;
      flex-wrap: nowrap;
       animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;
    }
    ul li {
      flex-shrink: 0;
      width: 100%;
      height: 100%;
      animation: liMove calc(var(--speed)) infinite;
    }
    @keyframes move {
      0% {
        transform: translate(0, 0);
      }
      100% {
        transform: translate(calc(var(--s) * var(--w) * -1px), 0);
      }
    }
    @keyframes liMove {
      0% {
        transform: translate(0, 0);
      }
      80%,
      100%  {
        transform: translate(calc(var(--w) * -1px), 0);
      }
    }
    Salin selepas log masuk

    这样,我们就轻松的转化为了横向的效果:

    完整的代码,你可以戳这里:CodePen Demo -- Horizontal Infinity Loop

    https://codepen.io/Chokcoco/pen/JjpNBXY

    轮播图?不在话下

    OK,上面的只是文字版的轮播,那如果是图片呢?

    没问题,方法都是一样的。基于上述的代码,我们可以轻松地将它修改一下后得到图片版的轮播效果。

    代码都是一样的,就不再列出来,直接看看效果:

    完整的代码,你可以戳这里:CodePen Demo -- Horizontal Image Infinity Loop

    https://codepen.io/Chokcoco/pen/GRQvqgq

    掌握了这个技巧之后,你可以将它运用在非常多只需要简化版的轮播效果之上。

    再简单总结一下,非常有意思的技巧:

    • 利用 逐帧动画,实现整体的轮播的循环效果

    • 利用 补间动画,实现具体的 状态A状态B* 的动画效果

    • 逐帧动画 配合 补间动画 构成整体轮播的效果

    • 通过向 HTML 结构末尾补充一组头部数据,实现整体动画的衔接

    • 通过 HTML 元素的 style 标签,利用 CSS 变量,填入实际的参与循环的 DOM 个数,可以实现 JavaScript 与 CSS 的打通

    (学习视频分享:web前端

    Atas ialah kandungan terperinci Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Cara Membuka Segala -galanya Di Myrise
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Cara mengubah saiz bootstrap Cara mengubah saiz bootstrap Apr 07, 2025 pm 03:18 PM

    Untuk menyesuaikan saiz unsur-unsur dalam bootstrap, anda boleh menggunakan kelas dimensi, yang termasuk: menyesuaikan lebar: .col-, .w-, .mw-adjust ketinggian: .h-, .min-h-, .max-h-

    Cara memasukkan gambar di bootstrap Cara memasukkan gambar di bootstrap Apr 07, 2025 pm 03:30 PM

    Terdapat beberapa cara untuk memasukkan imej dalam bootstrap: masukkan imej secara langsung, menggunakan tag HTML IMG. Dengan komponen imej bootstrap, anda boleh memberikan imej yang responsif dan lebih banyak gaya. Tetapkan saiz imej, gunakan kelas IMG-cecair untuk membuat imej boleh disesuaikan. Tetapkan sempadan, menggunakan kelas IMG-Sempadan. Tetapkan sudut bulat dan gunakan kelas IMG-bulat. Tetapkan bayangan, gunakan kelas bayangan. Saiz semula dan letakkan imej, menggunakan gaya CSS. Menggunakan imej latar belakang, gunakan harta CSS imej latar belakang.

    Cara menggunakan butang bootstrap Cara menggunakan butang bootstrap Apr 07, 2025 pm 03:09 PM

    Bagaimana cara menggunakan butang bootstrap? Perkenalkan CSS bootstrap untuk membuat elemen butang dan tambahkan kelas butang bootstrap untuk menambah teks butang

    Cara Menyiapkan Kerangka untuk Bootstrap Cara Menyiapkan Kerangka untuk Bootstrap Apr 07, 2025 pm 03:27 PM

    Untuk menubuhkan rangka kerja bootstrap, anda perlu mengikuti langkah -langkah ini: 1. Rujuk fail bootstrap melalui CDN; 2. Muat turun dan tuan rumah fail pada pelayan anda sendiri; 3. Sertakan fail bootstrap di HTML; 4. Menyusun sass/kurang seperti yang diperlukan; 5. Import fail tersuai (pilihan). Setelah persediaan selesai, anda boleh menggunakan sistem grid Bootstrap, komponen, dan gaya untuk membuat laman web dan aplikasi yang responsif.

    Cara Menulis Garis Pecah Di Bootstrap Cara Menulis Garis Pecah Di Bootstrap Apr 07, 2025 pm 03:12 PM

    Terdapat dua cara untuk membuat garis perpecahan bootstrap: menggunakan tag, yang mewujudkan garis perpecahan mendatar. Gunakan harta sempadan CSS untuk membuat garis perpecahan gaya tersuai.

    Peranan HTML, CSS, dan JavaScript: Tanggungjawab Teras Peranan HTML, CSS, dan JavaScript: Tanggungjawab Teras Apr 08, 2025 pm 07:05 PM

    HTML mentakrifkan struktur web, CSS bertanggungjawab untuk gaya dan susun atur, dan JavaScript memberikan interaksi dinamik. Ketiga melaksanakan tugas mereka dalam pembangunan web dan bersama -sama membina laman web yang berwarna -warni.

    Cara melihat tarikh bootstrap Cara melihat tarikh bootstrap Apr 07, 2025 pm 03:03 PM

    Jawapan: Anda boleh menggunakan komponen pemetik tarikh bootstrap untuk melihat tarikh di halaman. Langkah -langkah: Memperkenalkan rangka kerja bootstrap. Buat kotak input pemilih Tarikh dalam HTML. Bootstrap secara automatik akan menambah gaya kepada pemilih. Gunakan JavaScript untuk mendapatkan tarikh yang dipilih.

    Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

    Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

    See all articles