按钮循环波动

博客分享了相关代码,虽提及有转载部分,但重点是博主自己的代码,涉及HTML、CSS和JavaScript等信息技术领域内容。

:after{
    content: "";
    animation: pulse-border-2 2s ease-out infinite;
    top: 36px;
    left: 50%;
    background: #fff;
    width: 100%;
    border-radius: 36px;
}

 

@keyframes pulse-border-2{
0%{transform:translate(-50%,-50%) translateZ(0) scale(1);opacity:.7}
100%{transform:translate(-50%,-50%) translateZ(0) scale(1.35);opacity:.1}
}

下面提供全部代码(上面是转载,下面是我自己的代码)

.btn-play {
        display: flex;
        justify-content: center;
        align-items: center;
        border-radius: 100%;
        border: none;
        outline: none !important;
        padding: 18px 20px 20px 28px;
        background: #FFFFFF;
    }

    .btn-play:before {
        content: "";
        position: absolute;
        z-index: 0;
        left: 50%;
        top: 50%;
        transform: translateX(-50%) translateY(-50%);
        display: block;
        width: 60px;
        height: 60px;
        background: #FFFFFF;
        border-radius: 100%;
        animation: pulse-border 1500ms ease-out infinite;
    }

    .btn-play:after {
        content: "";
        position: absolute;
        z-index: 1;
        left: 50%;
        top: 50%;
        transform: translateX(-50%) translateY(-50%);
        display: block;
        width: 60px;
        height: 60px;
        background: #FFFFFF;
        border-radius: 100%;
        transition: all 200ms;
    }

    .btn-play span {
        z-index: 3;
        width: 0;
        height: 0;
        border-left: 16px solid #E47A2E;
        border-top: 11px solid transparent;
        border-bottom: 11px solid transparent;
    }

    @keyframes pulse-border {
        0% {
            transform: translateX(-50%) translateY(-50%) translateZ(0) scale(1);
            opacity: 1;
        }
        100% {
            transform: translateX(-50%) translateY(-50%) translateZ(0) scale(2);
            opacity: 0;
        }
    }

.playIcon{
    max-width: 100%;
    max-height: 100%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
<div class="btn-play playIcon" >
     <span></span>
</div>

<think>嗯,用户想用CSS实现波动动画效果。首先,我得回忆一下相关的CSS属性和技术。波动效果通常可以用动画和变形来实现,比如使用transform的scale或者translateY。可能需要关键帧动画@keyframes来定义波动过程。 记得之前看过一些例子,比如通过伪元素:before和:after来创建多层波浪,这样可以让效果更立体。可能需要调整它们的定位和动画延迟,形成波浪起伏的感觉。另外,border-radius可以控制元素的圆角,让波浪看起来更自然。 用户提到的引用里有用到animation-play-state,这可能涉及到用JavaScript控制动画的播放和暂停,比如在音频播放时同步波动。不过用户现在可能只需要基础的CSS实现,所以先专注在纯CSS方法。 还有,波动效果可能需要元素上下移动,比如使用translateY在关键帧中从0%到100%的变化。另外,颜色的渐变或者透明度的变化可以增强视觉效果。比如引用中的例子用了背景色的渐变和位置的调整。 可能需要考虑使用伪元素来减少额外的HTML标签,这样结构更简洁。同时,调整动画的timing-function,比如使用ease-in-out,让动画更平滑。延迟不同伪元素的动画,可以产生连续的波浪效果。 另外,圆形的波动可能需要结合border-radius:50%来制作水波纹扩散的效果,比如点击按钮后的涟漪效果。这种可能需要scale变换,从0放大到一定比例,同时透明度逐渐降低。 总结一下,步骤可能是:定义关键帧动画,应用在元素或伪元素上,调整transform属性和时间函数,可能使用多层伪元素并设置不同的延迟,最后测试效果并调整参数。</think>### 如何用CSS实现波动动画效果 #### 一、基础波动动画实现 1. **关键帧动画定义** 使用`@keyframes`定义波动关键帧,例如上下移动的波浪效果: ```css @keyframes wave { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } ``` 2. **应用动画到元素** 将动画绑定到目标元素,并设置时长和循环方式: ```css .wave-element { animation: wave 2s ease-in-out infinite; } ``` #### 二、多层波浪叠加效果 通过伪元素(`:before`, `:after`)叠加多层波浪,增强立体感: ```css .wave-container { position: relative; } .wave-container:before, .wave-container:after { content: ''; position: absolute; width: 100%; height: 100%; background: rgba(0, 120, 255, 0.3); border-radius: 45% 48%; animation: wave 3s linear infinite; } .wave-container:after { animation-delay: -1s; /* 延迟形成错位波动 */ } ``` #### 三、水波纹扩散效果 结合`scale`和透明度实现点击扩散效果: ```css @keyframes ripple { from { transform: scale(0); opacity: 1; } to { transform: scale(2); opacity: 0; } } .ripple-effect { animation: ripple 1s ease-out; } ``` #### 四、动态控制动画状态 通过JavaScript控制动画播放/暂停: ```javascript const waveElement = document.querySelector('.wave-element'); // 暂停动画 waveElement.style.animationPlayState = 'paused'; // 播放动画 waveElement.style.animationPlayState = 'running'; ``` #### 五、参数调整技巧 - **波形形状**:通过修改`border-radius`值(如`45% 48%`)可调整波浪的扭曲程度[^4] - **颜色渐变**:使用`background: linear-gradient()`实现颜色过渡 - **运动曲线**:更换`animation-timing-function`(如`cubic-bezier(0.4, 0, 0.2, 1)`)改变运动节奏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值