📅  最后修改于: 2023-12-03 14:55:58.078000             🧑  作者: Mango
水效果是指在图形界面或网页设计中,通过一些特殊的技术手段,使画面中的水具有动态、流动的效果。通常是通过让水的颜色和形状随时间的变化而产生出来的。
实现水效果的方式有多种,以下列举一些主要的方式:
可以通过CSS的transform和animation属性来实现水波纹效果,具体实现可以查看代码片段。
Canvas是HTML5提供的一个绘图标签,通过利用它的API可以实现各种绘图效果,包括水效果。在Canvas中,可以通过绘制多条线条并逐渐变化其坐标值,从而实现水的波动效果。具体实现可以查看代码片段。
SVG是一种基于XML的图像格式,可以在浏览器中直接显示。利用SVG的动画属性和滤镜效果,也可以实现水效果。具体实现可以查看代码片段。
.wave {
position: relative;
width: 200px;
height: 200px;
background: blue;
border-radius: 50%;
animation: wave 1.5s ease-in-out infinite;
}
@keyframes wave {
0% {
transform: translate(0, 0);
}
50% {
transform: translate(-10px, -10px);
}
100% {
transform: translate(0, 0);
}
}
<canvas id="canvas"></canvas>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
let t = 0;
function drawWave() {
const width = canvas.width;
const height = canvas.height;
const waveHeight = 20; // 波浪高度
const waveLength = 200; // 波浪长度
const speed = 0.05; // 波浪速度
const offset = height / 2; // 偏移量
ctx.clearRect(0, 0, width, height);
ctx.beginPath();
for (let x = 0; x <= width; x += 10) {
const y = waveHeight * Math.sin(x / waveLength * Math.PI * 2 + t);
ctx.lineTo(x, y + offset);
}
ctx.strokeStyle = 'blue';
ctx.stroke();
}
function loop() {
t += speed;
drawWave();
requestAnimationFrame(loop);
}
loop();
</script>
<svg viewBox="0 0 400 400">
<rect x="0" y="0" width="400" height="400" fill="#2a9d8f"/>
<circle cx="200" cy="150" r="70" fill="#fff">
<animate attributeName="r" from="70" to="85" dur="2s" repeatCount="indefinite"/>
<animate attributeName="fill" values="#fff;#2a9d8f;#fff" dur="2s" repeatCount="indefinite"/>
<animateTransform attributeName="transform" attributeType="XML" type="translate"
values="-10 0; 0 10; 10 0; 0 -10; -10 0" dur="1.2s" repeatCount="indefinite"/>
<animate attributeName="opacity" values="1;0;1" dur="2s" repeatCount="indefinite"/>
<animateTransform attributeName="transform" attributeType="XML" type="rotate"
from="0" to="360" dur="4s" repeatCount="indefinite"/>
<animateMotion path="M 200 150 C 100 250, 300 250, 200 150 S 100 50, 200 150" dur="3s" repeatCount="indefinite"/>
<animate attributeName="stroke-width" from="2" to="0" dur="2s" repeatCount="indefinite"/>
<animate attributeName="stroke-dashoffset" from="615" to="0" dur="3s" repeatCount="indefinite" />
<animate attributeName="stroke-dasharray" values="0 615; 40 575; 60 555; 80 535; 100 515" dur="3s" repeatCount="indefinite" />
</circle>
</svg>
以上是三种实现水效果的方式,可以根据实际需要选择相应的方式来实现。