写一个模拟微信拆红包摇晃的动画效果
要模拟微信拆红包摇晃的动画效果,你可以使用HTML、CSS和JavaScript。以下是一个简单的示例,展示了如何实现这种效果:
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>微信拆红包摇晃动画</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="red-packet" id="redPacket">
<div class="front">红包</div>
<div class="back">拆开有奖</div>
</div>
<button onclick="shake()">拆红包</button>
<script src="script.js"></script>
</body>
</html>
CSS (styles.css)
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #f5f5f5;
}
.red-packet {
position: relative;
width: 150px;
height: 200px;
background-color: red;
border-radius: 15px;
transform-style: preserve-3d;
transition: transform 0.3s;
transform: rotateY(0deg);
}
.front, .back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
color: #fff;
}
.back {
transform: rotateY(180deg);
}
JavaScript (script.js)
function shake() {
const redPacket = document.getElementById('redPacket');
let shakeCount = 0;
const shakeMaxCount = 6; // 设置摇晃次数
const shakeInterval = 100; // 设置摇晃间隔,单位为毫秒
const shakeAngle = 10; // 设置摇晃角度,单位为度
const shakeIntervalId = setInterval(() => {
shakeCount++;
const angle = Math.random() > 0.5 ? shakeAngle : -shakeAngle;
redPacket.style.transform = `rotateY(${angle}deg)`;
if (shakeCount >= shakeMaxCount) {
clearInterval(shakeIntervalId);
// 红包摇晃结束后,展示背面内容,模拟拆开效果
setTimeout(() => {
redPacket.style.transform = `rotateY(180deg)`;
}, shakeInterval);
}
}, shakeInterval);
}
这个示例中,HTML部分创建了一个红包元素和一个拆红包按钮。CSS部分定义了红包的样式,包括前后两面的内容。JavaScript部分实现了拆红包时的摇晃动画效果,通过定时器模拟连续摇晃,并在摇晃结束后展示红包的背面内容。