نحوه ایجاد برف متحرک در وب سایت (با CSS و جاوا اسکریپت)
انتشار: آذر 07، 1401
بروزرسانی: 19 آذر 1404

نحوه ایجاد برف متحرک در وب سایت (با CSS و جاوا اسکریپت)


این فصل شادی است، پس بگذار برف ببارد، بگذار برف ببارد، بگذار برف ببارد!

1. نشانه گذاری با HTML تعطیلات

برای نشانه گذاری خود، دو کانتینر اصلی خواهیم داشت: یک عنصر اصلی حاوی محتوای صفحه ما و یک عنصر کانتینر برفی که برف را نمایش می دهد.

1
2
  Happy Holidays!
3

4

id="snow-container">

5

2. استایل متحرک برفی با CSS

در این نسخه ی نمایشی، محتوای اصلی ما دارای رنگ پس زمینه گرادیان است تا جلوه ای از آسمان شب به آن بدهد. ما این را با استفاده از تابع گرادیان خطی CSS به دست می آوریم.

برای سادگی، فرض کنید ما در حال ساخت این برف متحرک در CodePen هستیم، بنابراین نشانه گذاری در تب HTML، سبک ها در تب CSS و غیره قرار می گیرد.

1
main {
2
  background: linear-gradient(to bottom, #2d91c2 0%, #1e528e 100%);
3
  display: flex;
4
  align-items: center;
5
  justify-content: center;
6
  font-family: "Pacifico", cursive;
7
  height: 100vh;
8
  padding: 20px;
9
  text-align: center;
10
}
11

12
h1 {
13
  color: white;
14
}

بنر ما اکنون به این شکل است:

بنر شیب آبی با متن تعطیلات مبارکبنر شیب آبی با متن تعطیلات مبارکبنر شیب آبی با متن تعطیلات مبارک

ما همچنین از CSS برای مدیریت انیمیشن هر عنصر برفی استفاده خواهیم کرد. هر دانه ی برف دو انیمیشن خواهد داشت: یک انیمیشن پاییزی برای کنترل دانه های برف که از بالا به پایین صفحه حرکت می کند و یک انیمیشن نوسانی برای حرکت آهسته دانه های برف به سمت دیگر.

1
@keyframes fall {
2
  0% {
3
    opacity: 0;
4
  }
5
  50% {
6
    opacity: 1;
7
  }
8
  100% {
9
    top: 100vh;
10
    opacity: 1;
11
  }
12
}
13

14
@keyframes sway {
15
  0% {
16
    margin-left: 0;
17
  }
18
  25% {
19
    margin-left: 50px;
20
  }
21
  50% {
22
    margin-left: -50px;
23
  }
24
  75% {
25
    margin-left: 50px;
26
  }
27
  100% {
28
    margin-left: 0;
29
  }
30
}

همچنین به محفظه برفی خود و عنصر برفی که در جاوا اسکریپت ایجاد خواهیم کرد، استایل می دهیم.

1
#snow-container {  
2
  height: 100vh;
3
  overflow: hidden;
4
  position: absolute;
5
  top: 0;
6
  transition: opacity 500ms;
7
  width: 100%;
8
}
9

10
.snow {
11
  animation: fall ease-in infinite, sway ease-in-out infinite;
12
  color: skyblue;
13
  position: absolute;
14
}

ویژگی انیمیشن در این دمو سه مقدار دارد:

  • name: این مقدار انیمیشنی است که در زیر فریم های کلیدی ایجاد کردیم.
  • زمان بندی: این نحوه پیشرفت انیمیشن را مشخص می کند.
  • تکرار: این تعداد دفعاتی است که انیمیشن اتفاق می افتد. ما از بی نهایت برای تکرار مداوم انیمیشن دانه های برف استفاده می کنیم.

3. فا لا لا لا لا قابلیت ♬

حالا می توانیم روی قسمت سرگرم کننده کار کنیم: برف کردن! ابتدا، در تب JS در CodePen، بیایید یک مقدار به عنصر ظرف خود اختصاص دهیم:

1
const snowContainer = document.getElementById("snow-container");

برای محتوای برف ریزه خود، از نمادهای HTML (❄ ❅ ❆) استفاده خواهیم کرد:

کاراکترهای دانه برف با استفاده از کد HTMLکاراکترهای دانه برف با استفاده از کد HTMLکاراکترهای دانه برف با استفاده از کد HTML

ما یک را ایجاد خواهیم کرد snowContent آرایه ای که حاوی کدهای نماد باشد

1
const snowContent = (\'\', \'\', \'\')

برای ایجاد افکت برف در حال سقوط، باید ظاهر و انیمیشن هر دانه برف را تصادفی کنیم.

ما استفاده خواهیم کرد Math.random() و Math.floor() توابعی برای تولید مقادیر تصادفی برای عناصر برفی متحرک ما.

1
const random = (num) => {
2
  return Math.floor(Math.random() * num);
3
}

اکنون می توانیم یک تابع برای ایجاد یک استایل تصادفی برای هر دانه ی برف ایجاد کنیم. ما موقعیت، اندازه و مدت انیمیشن تصادفی ایجاد خواهیم کرد.

1
const getRandomStyles = () => {
2
  const top = random(100);
3
  const left = random(100);
4
  const dur = random(10) + 10;
5
  const size = random(25) + 25;
6
  return `
7
    top: -${top}%;
8
    left: ${left}%;
9
    font-size: ${size}px;
10
    animation-duration: ${dur}s;
11
  `;
12
}

برای مدت زمان و اندازه ثابت، یک مقدار عدد ثابت اضافه می کنیم تا مطمئن شویم که عدد تصادفی تولید شده دارای حداقل مقدار عددی است که اضافه می شود (یعنی کمترین عدد برای مدت زمان انیمیشن هر دانه برف 10 ثانیه است)

برای ثابت بالای خود، یک مقدار منفی نسبت می دهیم تا دانه های برف از هر درصدی بالای صفحه قابل مشاهده شروع شود.

در مرحله بعد، ما به اضافه کردن دانه های برف به ظرف برف می پردازیم.

1
const createSnow = (num) => {
2
  for (var i = num; i > 0; i--) {
3
    var snow = document.createElement("div");
4
    snow.className = "snow";
5
    snow.style.cssText = getRandomStyles();
6
    snow.innerHTML = snowContent(random(2))
7
    snowContainer.append(snow);
8
  }
9
}

در این دمو از a استفاده می کنیم برای حلقه برای ایجاد تعداد ثابت دانه های برف و اضافه کردن آنها به ظرف. ما همچنین به صورت تصادفی innerHTML را به عنوان هر یک از مقادیر موجود در خود اختصاص می دهیم snowContent آرایه

سپس، ما تماس بگیرید createSnow هنگامی که صفحه ما با استفاده از شنونده رویداد بارگذاری بارگیری می شود، عملکرد را انجام دهید.

1
window.addEventListener("load", () => {
2
  createSnow(30)
3
});

و برف می بارد! کلیک کنید اجرا مجدد برای دیدن برف متحرک:

از بین بردن دانه های برف

همچنین می توانیم یک تابع برای حذف دانه های برف اضافه کنیم.

1
const removeSnow = () => {
2
  snowContainer.style.opacity = "0";
3
  setTimeout(() => {
4
    snowContainer.remove()
5
  }, 500)
6
}

در این تابع، به snowContainer خود یک کدورت 0 اختصاص می دهیم تا به آرامی محو شود و بعد از نیم ثانیه، ظرف را با استفاده از .remove() روش

سپس می توانیم انتخاب کنیم که این تابع را هر طور که می خواهیم فراخوانی کنیم. هنگامی که کاربر در هر نقطه از صفحه کلیک می کند، می توانیم برف را حذف کنیم:

1
window.addEventListener("click", () => {
2
  removeSnow()
3
});

یا می توانیم آن را در تابع setTimeout () قرار دهیم تا پس از مدت زمان مشخصی ناپدید شود:

1
window.addEventListener("load", () => {
2
  createSnow(30)
3
  setTimeout(removeSnow, 10000)
4
});

از بین بردن دانه های برف

از آنجایی که ما این را از ابتدا ساخته ایم، می توانیم محتوای عنصر و انیمیشن را نیز به روزرسانی کنیم تا جلوه های سرگرم کننده دیگری مانند بالن های شناور ایجاد کنیم:

یا حتی گربه Nyan متحرک:

امیدوارم از این آموزش متحرک برف لذت برده باشید و باعث شده احساس خوبی داشته باشید و جشن بگیرید!

آموزش های بیشتر زمستانی و متحرک برف


منبع: https://webdesign.tutsplus.com/how-to-create-animated-snow-on-a-website-with-css-and-javascript--cms-93562t