CSS实现直播点赞效果

2,366次阅读
没有评论

共计 2075 个字符,预计需要花费 6 分钟才能阅读完成。

前言

2022 年马上过去了,迎接 2023 美好的一年。今天我给大家介绍一个如何用纯 css 先实现点赞动画效果,这个效果主要是用 css 的 transition 来实现的。
现在给大家介绍实现步骤。

我们首先要实现多个表情,一个 DOM 标签放入一个随机的表情。可以手动添加,当然也可以用 css 处理器 sass 来实现。如下:

$expression: "😀", "🤣", "❤️", "😻", "👏", "🤘", "🤡", "🤩", "👍🏼", "🐮", "🎈", "💕", "💓", "💚";
.g-wrap {
    position: relative;
    width: 50px;
    height: 50px;
}
@for $i from 1 to 51 {li:nth-child(#{$i}) {
        position: absolute;
        top: 0;
        left: 0;
        width: 50px;
        height: 50px;

        &::before {content: nth($expression, random(length($expression)));
            position: absolute;
            font-size: 50px;
        }
    }
}

如果这些表情一直都是在运动的,只不过不点击的时候,它们的透明度都为 0,我们要做的,就是当我们点击的时候,让它们从 opacity: 0 变到 opacity: 1。

要实现这一点,我们需要巧妙的用到 transition。

我们以一个表情为例子:

默认它的透明度为 opacity: 0.1

点击的时候,它的透明度瞬间变成 opacity: 1

然后,通过 transition-delay 让 opacity: 1 的状态保持一段时间后

逐渐再消失,变回 opacity: 0.1

完整 css 代码

html, body {
    width: 100%;
    height: 100%;
}

$expression: "😀", "🤣", "❤️", "😻", "👏", "🤘", "🤡", "🤩", "👍🏼", "🐮", "🎈", "💕", "💓", "💚";

body {
    display: flex;
    background-color: #000;
}

.g-wrap:nth-child(2) li {opacity: .1;}

.g-wrap {
    position: relative;
    margin: auto;
    width: 50px;
    height: 50px;

    &::before {
        content: "👍🏼";
        position: absolute;
        top: 0;
        left: 0;
        width: 50px;
        height: 50px;
        line-height: 50px;
        font-size: 24px;
        text-align: center;
        z-index: -1;
        user-select: none;
        filter: grayscale(1);
        border: 1px solid #999;
        border-radius: 50%;
        background: #999;
        transition: 0.1s;
    }
    &:active::before {transform: scale(1.1);
    }
}

@for $i from 1 to 51 {li:nth-child(#{$i}) {
        position: absolute;
        top: 0;
        left: 0;
        width: 30px;
        height: 30px;
        transform: rotate(#{random() * 80 - 40}deg);
        animation: move #{random() * 2500 + 1500}ms infinite #{random() * 4000 / -1000}s cubic-bezier(.46,.53,.51,.62);
        opacity: 0;
        cursor: pointer;
        transition: 1.5s opacity .8s;
        user-select: none;

        &::before {content: nth($expression, random(length($expression)));
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 50px;
            height: 50px;
            font-size: 50px;
        }
    }

    li:active {
        transition: .1s opacity;
        opacity: 1!important;
    }
}

@keyframes move {
    100% {transform: rotate(0) translate(0, -250px);
    }
}

p {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(calc(-50% - 140px), calc(-50% + 50px));
    color: #fff;
    font-size: 36px;
}

p {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(calc(-50% - 100px), calc(-50% + 50px));
    color: 40px;
    user-select: none;
}

完整 div 代码

小结

大家 copy 出来,可以看到效果了,今天是 2022 年最后一天,祝大家新年快了!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计2075字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)