要实现某种布局,最好的颤动小部件(通常指的是动画效果中的抖动效果)取决于具体的需求和使用的平台。以下是一些常见的颤动小部件及其特点:
CSS 动画是最简单且性能较好的方式之一,适用于大多数现代浏览器。
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shake Animation</title>
<style>
.shake {
animation: shake 0.5s;
}
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
</style>
</head>
<body>
<div class="shake">Shake Me!</div>
</body>
</html>
使用 JavaScript 库如 anime.js
或 GSAP
可以实现更复杂的动画效果。
示例代码(使用 anime.js):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shake Animation with anime.js</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<style>
.shake {
font-size: 2em;
}
</style>
</head>
<body>
<div class="shake">Shake Me!</div>
<script>
anime({
targets: '.shake',
translateX: [
{ value: -10, duration: 50 },
{ value: 10, duration: 50 }
],
translateY: [
{ value: -10, duration: 50 },
{ value: 10, duration: 50 }
],
rotate: [
{ value: -5, duration: 50 },
{ value: 5, duration: 50 }
],
loop: true,
easing: 'linear',
direction: 'alternate'
});
</script>
</body>
</html>
如果你使用的是某个 UI 框架(如 React、Vue 等),可能会有现成的颤动组件。
示例代码(使用 React 和 styled-components):
import React from 'react';
import styled, { keyframes } from 'styled-components';
const shake = keyframes`
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
`;
const ShakeDiv = styled.div`
animation: ${shake} 0.5s;
font-size: 2em;
`;
const App = () => {
return <ShakeDiv>Shake Me!</ShakeDiv>;
};
export default App;
颤动效果常用于以下场景:
requestAnimationFrame
优化动画性能,或者减少不必要的动画。通过以上方法,你可以根据具体需求选择最适合的颤动小部件,并解决可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云