当前位置:   article > 正文

用HTML5 + JavaScript实现下雪效果

用HTML5 + JavaScript实现下雪效果

用HTML5 + JavaScript实现下雪效果

<canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。

<canvas> 标签/元素只是图形容器,必须使用脚本来绘制图形。

HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112916903

下面是用HTML5 + JavaScript实现下雪效果示例,展示了如何使用 HTML5 的 <canvas> 元素以及 JavaScript 来创建下雪效果。效果如下:

源码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Snow Effect</title>
  6. <style>
  7. body {
  8. margin: 0;
  9. overflow: hidden;
  10. background-color: #D3D3D3;
  11. }
  12. canvas {
  13. display: block;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <canvas id="snow"></canvas>
  19. </body>
  20. <script>
  21. document.addEventListener('DOMContentLoaded', function() {
  22. var canvas = document.getElementById('snow');
  23. var ctx = canvas.getContext('2d');
  24. // 设置 canvas 的大小为全屏
  25. canvas.width = window.innerWidth;
  26. canvas.height = window.innerHeight;
  27. // 雪花的数量
  28. var numberOfSnowflakes = 100;
  29. var snowflakes = [];
  30. for (var i = 0; i < numberOfSnowflakes; i++) {
  31. snowflakes.push({
  32. x: Math.random() * canvas.width,
  33. y: Math.random() * canvas.height,
  34. radius: Math.random() * 4 + 1,
  35. density: Math.random() * numberOfSnowflakes
  36. });
  37. }
  38. // 绘制雪花
  39. function drawSnowflakes() {
  40. ctx.clearRect(0, 0, canvas.width, canvas.height);
  41. ctx.fillStyle = 'white';
  42. ctx.beginPath();
  43. for (var i = 0; i < numberOfSnowflakes; i++) {
  44. var snowflake = snowflakes[i];
  45. ctx.moveTo(snowflake.x, snowflake.y);
  46. ctx.arc(snowflake.x, snowflake.y, snowflake.radius, 0, Math.PI * 2, true);
  47. }
  48. ctx.fill();
  49. moveSnowflakes();
  50. }
  51. // 移动雪花
  52. function moveSnowflakes() {
  53. for (var i = 0; i < numberOfSnowflakes; i++) {
  54. var snowflake = snowflakes[i];
  55. snowflake.y += Math.pow(snowflake.density, 0.5) + 1;
  56. snowflake.x += Math.sin(snowflake.y);
  57. // 当雪花到达屏幕底部时,重新设置它们的位置
  58. if (snowflake.y > canvas.height) {
  59. snowflakes[i] = {
  60. x: Math.random() * canvas.width,
  61. y: 0,
  62. radius: snowflake.radius,
  63. density: snowflake.density
  64. };
  65. }
  66. }
  67. }
  68. // 使用 requestAnimationFrame 来持续绘制雪花
  69. function animate() {
  70. requestAnimationFrame(animate);
  71. drawSnowflakes();
  72. }
  73. animate();
  74. });
  75. </script>
  76. </html>

通过 CSS 控制背景颜色,JavaScript和 <canvas> 负责实现下雪效果。drawSnowflakes 函数负责绘制雪花,而 moveSnowflakes 函数则更新每个雪花的位置,使它们下落。animate 函数使用 requestAnimationFrame 来创建一个循环,不断绘制和更新雪花,从而实现动态的下雪效果。

改进:加入背景图片,并确保图片等比例缩放以适应浏览器窗口的大小。通过 CSS 控制背景颜色或图片,JavaScript 和 <canvas> 负责动态效果,两者相互独立,易于管理和修改。

你可以将背景图片作为 <body> 标签的背景,使用 CSS 来设置并确保其等比例缩放,通过 CSS 的 background 属性来实现:

            background-color: #D3D3D3;

改为:

            background: url(' snow_background.jpg') no-repeat center center fixed;

            background-size: cover;

其中,snow_background.jpg,我这里用:

效果如下:

OK!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/66687
推荐阅读
相关标签
  

闽ICP备14008679号