国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分享一個有意思的文字飛入動畫(模仿水滴融合)

這篇具有很好參考價值的文章主要介紹了分享一個有意思的文字飛入動畫(模仿水滴融合)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

先上效果圖:
分享一個有意思的文字飛入動畫(模仿水滴融合)
代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-428819.html

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

        :root {
            --text-color: #f6f1e6;
            --drops-color: #231d1c;
        }

        body {
            background: var(--text-color);
            font-family: Georgia, serif;
        }

        .canvas {
            position: relative;
            height: 100vh;
            overflow: hidden;
        }
        .canvas--animated .puddle__letter {
            -webkit-animation-play-state: running;
            animation-play-state: running;
        }

        .puddle {
            position: absolute;
            display: flex;
            transform: rotate(var(--r, 0deg)) translate(calc(-50% - var(--x, 0)), calc(-50% - var(--y, 0)));
            top: 50%;
            left: 50%;
            color: var(--text-color);
            font-size: 6vmin;
            white-space: pre;
        }
        .puddle__letter {
            transform: translateY(800px);
            padding: 0.1em 0.2em;
            margin: -0.1em -0.2em;
            will-change: transform;
            -webkit-animation: drop 800ms var(--delay) ease-out forwards paused;
            animation: drop 800ms var(--delay) ease-out forwards paused;
        }

        .combined-puddles {
            position: relative;
            height: 100%;
            z-index: -1;
            filter: url(#drops-filter);
            -webkit-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
        }
        .combined-puddles .puddle__letter {
            border-radius: 50%;
            color: var(--drops-color);
            background-color: currentColor;
        }
        .combined-puddles .puddle__letter--t-1 {
            box-shadow: 0.0259077911em 0.0158195613em 0 0.156531918em currentColor;
        }
        .combined-puddles .puddle__letter--t-2 {
            box-shadow: 0.0027610231em 0.0292517118em 0 0.0017377822em currentColor;
        }
        .combined-puddles .puddle__letter--t-3 {
            box-shadow: 0.0014897121em 0.0208965418em 0 0.2029532073em currentColor;
        }
        .combined-puddles .puddle__letter--t-4 {
            box-shadow: 0.0181212165em 0.0001267036em 0 0.2696130855em currentColor;
        }
        .combined-puddles .puddle__letter--t-5 {
            box-shadow: 0.0299544544em 0.0155872295em 0 0.3927980665em currentColor;
        }
        .combined-puddles .puddle__letter--t-6 {
            box-shadow: 0.0223628085em 0.013623193em 0 0.3951977831em currentColor;
        }
        .combined-puddles .puddle__letter--t-7 {
            box-shadow: 0.017073126em 0.0166402911em 0 0.1251815461em currentColor;
        }
        .combined-puddles .puddle__letter--t-8 {
            box-shadow: 0.0160218528em 0.0103797109em 0 0.2355980051em currentColor;
        }
        .combined-puddles .puddle__letter--t-9 {
            box-shadow: 0.0061457537em 0.0272304962em 0 0.0502537243em currentColor;
        }
        .combined-puddles .puddle__letter--t-10 {
            box-shadow: 0.0010890892em 0.0108737853em 0 0.2990892848em currentColor;
        }

        @-webkit-keyframes drop {
            0% {
                transform: translate(0, 100vh);
            }
            80% {
                transform: translate(0, -5px);
            }
            100% {
                transform: translate(0, 0);
            }
        }

        @keyframes drop {
            0% {
                transform: translate(0, 100vh);
            }
            80% {
                transform: translate(0, -5px);
            }
            100% {
                transform: translate(0, 0);
            }
        }
    </style>
</head>
<body>
<div class="canvas">
    <div class="puddle" style="--x: 1.55em; --y: 3.73em">Roses are red</div>
    <div class="puddle" style="--x: 1.5em; --y: 1.8em">Violets are blue</div>
    <div class="puddle" style="--x: -1.5em; --y: -1.8em">Unexpected ";"</div>
    <div class="puddle" style="--x: -1.3em; --y: -3.7em">On line 32</div>
</div>
</body>
<script>
    class Droppy {
        DEFAULT_OPTIONS = {
            canvasSelector: ".canvas",
            textSelector: ".puddle",
            letterClassName: "puddle__letter",
            dropsClassName: "combined-puddles",
            delayBetweenDrops: 95,
            dropTypes: 10,
            wordAngleRange: [-3, 3]
        };

        constructor(opts) {
            this.opts = { ...this.DEFAULT_OPTIONS, ...opts };
            this.$textSelector = document.querySelectorAll(this.opts.textSelector);
            this.$canvas = document.querySelector(this.opts.canvasSelector);
            this.init();
        }

        init() {
            this.injectSVGFilter();
            this.wrapLetters();
            this.addDelayToEachLetter();
            this.createDrops();
            this.startAnimation();
        }

        getRandomInt = (min, max) => {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        };

        startAnimation() {
            this.$canvas.classList.add("canvas--animated");
        }

        wrapLetters() {
            this.$textSelector.forEach(($word) => {
                const letters = Array.from($word.innerText).map((letter) => {
                    const dropType = this.getRandomInt(1, this.opts.dropTypes);
                    const className = `${this.opts.letterClassName} ${this.opts.letterClassName}--t-${dropType}`;
                    return `<div class="${className}">${letter}</div>`;
                });
                const angle = this.getRandomInt(
                    this.opts.wordAngleRange[0],
                    this.opts.wordAngleRange[1]
                );
                $word.style.cssText += `--r:${angle}deg`;
                $word.innerHTML = letters.join("");
            });
        }
        addDelayToEachLetter() {
            const letters = document.querySelectorAll(`.${this.opts.letterClassName}`);
            Array.from(letters, ($letter, index) => {
                const delay = index * this.opts.delayBetweenDrops;
                $letter.style.cssText += `--delay:${delay}ms`;
            });
        }

        createDrops() {
            const $drops = document.createElement("div");
            $drops.className = this.opts.dropsClassName;
            Array.from(this.$textSelector, ($word) =>
                $drops.appendChild($word.cloneNode(true))
            );
            this.$canvas.appendChild($drops);
        }

        injectSVGFilter() {
            const filter =
                '<svg style="display:none;"><filter id="drops-filter" x="-50%" width="200%" y="-50%" height="200%" color-interpolation-filters="sRGB"><feGaussianBlur in="SourceGraphic" stdDeviation="8" result="blur" /><feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 21 -7" result="cm" /></filter></svg>';
            this.$canvas.insertAdjacentHTML("beforeend", filter);
        }
    }
    new Droppy();

</script>
</html>

到了這里,關(guān)于分享一個有意思的文字飛入動畫(模仿水滴融合)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 分享兩個有意思的登錄界面

    分享兩個有意思的登錄界面

    1.帶有浮動占位符和燈光按鈕的登錄界面 先上效果: 代碼如下: 2.跳躍的登錄字符登陸界面 先上效果: 代碼如下:

    2023年04月25日
    瀏覽(26)
  • 分享一組有意思的按鈕設(shè)計

    分享一組有意思的按鈕設(shè)計

    先上效果圖: 一共16個,每個都有自己不同的樣式和效果,可以用在自己的項目中,提升客戶體驗~ 再上代碼:

    2024年02月04日
    瀏覽(29)
  • 一個有意思的404頁面

    一個有意思的404頁面

    老規(guī)矩,先上效果圖: 下面代碼直接拷過去就能用: 不定期更新好玩的css樣式或頁面,點個訂閱鼓勵下吧。

    2023年04月20日
    瀏覽(32)
  • 有意思!一個關(guān)于 Spring 歷史的在線小游戲

    有意思!一個關(guān)于 Spring 歷史的在線小游戲

    發(fā)現(xiàn) Spring One 的官網(wǎng)上有個好玩的彩蛋,分享給大家! 進到Spring One的官網(wǎng),可以看到右下角有個類似馬里奧游戲中的金幣圖標。 點擊該金幣之后,會打開一個新的頁面,進入下面這樣一個名為:The History Of Spring 的在線小游戲 你可以使用上下左右的方向鍵來控制Spring的Logo一

    2024年04月27日
    瀏覽(24)
  • 2023年江蘇“領(lǐng)航杯”MISC一個很有意思的題目(別把雞蛋放在同一個籃子里面)

    2023年江蘇“領(lǐng)航杯”MISC一個很有意思的題目(別把雞蛋放在同一個籃子里面)

    題目附件:https://wwzl.lanzoue.com/i6HmX16finnc 1、題目信息 解壓壓縮包打開附件,獲得5141個txt文檔,每個文檔都有內(nèi)容,發(fā)現(xiàn)是base64加密的字符內(nèi)容,所以我們需要按照順序?qū)⒚總€文件的內(nèi)容寫到一個文件里面,然后base64解碼 我們觀察到每個文件的名稱其實是一段MD5值,我們使用

    2024年02月08日
    瀏覽(16)
  • 記錄-有意思的氣泡 Loading 效果

    記錄-有意思的氣泡 Loading 效果

    今日,群友提問,如何實現(xiàn)這么一個 Loading 效果: 這個確實有點意思,但是這是 CSS 能夠完成的? 沒錯,這個效果中的核心氣泡效果,其實借助 CSS 中的濾鏡,能夠比較輕松的實現(xiàn),就是所需的元素可能多點。參考我們之前的: 使用純 CSS 實現(xiàn)超酷炫的粘性氣泡效果 巧用 C

    2024年02月01日
    瀏覽(24)
  • 漲姿勢了,有意思的氣泡 Loading 效果

    漲姿勢了,有意思的氣泡 Loading 效果

    今日,群友提問,如何實現(xiàn)這么一個 Loading 效果: 這個確實有點意思,但是這是 CSS 能夠完成的? 沒錯,這個效果中的核心氣泡效果,其實借助 CSS 中的濾鏡,能夠比較輕松的實現(xiàn),就是所需的元素可能多點。參考我們之前的: 使用純 CSS 實現(xiàn)超酷炫的粘性氣泡效果 巧用 C

    2023年04月13日
    瀏覽(22)
  • 第五期:字符串的一些有意思的操作

    第五期:字符串的一些有意思的操作

    PS:每道題解題方法不唯一,歡迎討論!每道題后都有解析幫助你分析做題,答案在最下面,關(guān)注博主每天持續(xù)更新。 1. 替換空格 題目描述 請實現(xiàn)一個函數(shù),把字符串 s 中的每個空格替換成\\\"%20\\\"。 示例1: 輸入:s = “We are happy.” 輸出:“We%20are%20happy.” 示例2: 輸入:s =

    2024年02月08日
    瀏覽(89)
  • kill 進程時遇到的一件有意思的事情

    一般來講,我們在 kill 掉一個進程的時候通常有兩個選擇: 找到進程的 pid 號,然后執(zhí)行 kill 命令 找到進程的名字,然后執(zhí)行 pkill 命令 pkill 和 kill 命令都是向指定的進程發(fā)送信號,從而完成終結(jié)進程的操作,主要區(qū)別在于 pkill 命令與 pgrep 配套使用,能夠踢出指定終端用戶

    2023年04月10日
    瀏覽(31)
  • 有意思,我的GitHub賬號值$23806.2,快來試試你的?

    有意思,我的GitHub賬號值$23806.2,快來試試你的?

    睡不著,看到一個有意思的網(wǎng)站: Estimate Github Worth Generator 。 它可以用來估算 GitHub 賬號的價值。馬上試了一下。 我的賬號估值: $23806.2 操作很簡單,點擊Estimate Github Worth Generator,進入網(wǎng)站。 具體如下圖: 在唯一的輸入框中,輸入您的GitHub賬號,點擊按鈕 Generate Worth 按鈕

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包