微信小程序特效1/200:微信红包动画特效实现

背景

朋友们好!我是西瓜皮,一个立志写出 200 个小程序特效的创作者。新岁已至,2025
年开工之际,我特意为大家制作了一个微信红包动画特效,希望借这个小小的特效,给大家送上新春的祝福,愿大家在新的一年里万事顺遂,喜乐安康!

效果

在这里插入图片描述

1. 视觉设计

红包页面主要包含以下视觉元素:

<!-- /pages/redpacket/redpacket.wxml -->
<view class="container">
  <view class="redpacket {{isOpening ? 'opening' : ''}} {{isOpened ? 'opened' : ''}}">
    <!-- 关闭按钮 -->
    <view class="close-btn" bindtap="closeRedPacket">
      <text class="close-icon">×</text>
    </view>

    <!-- 红包头部 -->
    <view class="packet-header">
      <image class="packet-icon" src="/assets/redpacket-icon.png" mode="aspectFit"></image>
      <text class="packet-title">微信红包</text>
      <text class="packet-subtitle">给你发了一个红包</text>
    </view>

    <!-- 红包祝福语 -->
    <view class="blessing-text">恭喜发财,大吉大利!</view>

    <!-- 开红包按钮 -->
    <view class="packet-button" bindtap="openRedPacket">
      <text class="open-text">開</text>
    </view>

    <!-- 打开后的红包内容 -->
    <view class="packet-opened" wx:if="{{isOpened}}">
      <view class="money">
        <text class="symbol">¥</text>
        <text class="amount">{{amount}}</text>
      </view>
      <view class="detail-button" bindtap="goToDetail">查看详情</view>
    </view>
  </view>
</view> 
  • 半透明遮罩背景
  • 红包主体
  • 关闭按钮
  • 头部图标和标题
  • 祝福语文本
  • 开红包按钮
  • 打开后的金额展示

2. 动画效果

2.1 摇晃动画

当用户点击开红包按钮时,红包会有轻微的摇晃效果:

/** /pages/redpacket/redpacket.wxss **/
.opening {
  animation: shake 0.2s ease-in-out infinite;
}

.opened .packet-opened {
  opacity: 1;
  transform: scale(1);
  transition: all 0.3s ease-out;
}

@keyframes shake {
  0%, 100% {
    transform: rotate(0deg);
  }
  25% {
    transform: rotate(-1deg);
  }
  75% {
    transform: rotate(1deg);
  }
} 

使用 CSS @keyframes 实现左右摇摆,通过 transform: rotate() 控制摆动角度。

2.2 打开动画

红包打开时的过渡效果:

/** /pages/redpacket/redpacket.wxss **/
.packet-opened {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #FA5151;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  opacity: 0;
  transform: scale(0.8);
}

使用 CSS transformopacity 实现缩放淡入效果。

2.3 按钮阴影

开红包按钮的视觉层次:

/** /pages/redpacket/redpacket.wxss **/

.packet-button {
  width: 140rpx;
  height: 140rpx;
  background: #FFE2B1;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 120rpx;
  box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.2);
  position: relative;
}

.packet-button::after {
  content: '';
  position: absolute;
  top: -100rpx;
  left: 50%;
  width: 600rpx;
  height: 100rpx;
  background: radial-gradient(ellipse at center, rgba(0,0,0,0.1) 0%, rgba(0,0,0,0) 70%);
  transform: translateX(-50%);
}
  • 使用 box-shadow 制造按钮立体感
  • 使用 radial-gradient 创建投影效果

3. 微信小程序特性运用

  1. 自定义组件封装
  • 将红包封装为独立组件,方便复用
  • 使用 Component 构造器注册组件
  1. 事件处理
  • bindtap 处理点击事件
  • 自定义事件通知页面层
  1. 状态管理
  • 使用 data 管理红包状态
  • setData 触发视图更新
  1. 动画管理
  • CSS3 动画实现视觉效果
  • wx.createAnimation 处理复杂动画
  1. 条件渲染
  • 使用 wx:if 控制红包开启状态
  • 使用 class 绑定控制动画状态

4. 性能优化

  1. 动画性能
  • 使用 transform 代替位置属性
  • 避免频繁的 setData 调用
  1. 资源加载
  • 图片资源适当压缩
  • 使用 CDN 加速资源加载
  1. 渲染优化
  • 合理使用 wx:if 和 hidden
  • 避免频繁的条件切换

5. 交互优化

  1. 反馈及时性
  • 点击时立即显示动画效果
  • 状态变化有明确的视觉提示
  1. 容错处理
  • 处理异常状态展示
  • 添加加载中状态
  1. 无障碍支持
  • 适当的颜色对比度
  • 合理的点击区域大小

这个红包组件综合运用了微信小程序的多个特性,通过精心设计的动画效果提升了用户体验,是一个很好的动画交互案例。

体验

在这里插入图片描述

参考

https://www.code-box.fun/

联系

https://mp.weixin.qq.com/s/UrnGRks6R-JJ4oZTdt0Xrw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值