>  기사  >  웹 프론트엔드  >  무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명

무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명

云罗郡主
云罗郡主앞으로
2019-01-22 15:51:133916검색

겨울이 다가오고 있습니다. Shake Rock의 장면에는 무작위로 떨어지는 눈송이의 애니메이션이 필요하다고 말했습니다. 가장 먼저 떠오른 방법은 프로젝트가 매우 시급하다는 것입니다. 캔버스 지원이 가능하고 프로젝트에 등장하기 쉽습니다. 예측할 수 없는 호환성 문제로 인해 이 아이디어를 즉시 거부했습니다. JavaScript로 임의의 애니메이션을 작성하는 것은 너무 비쌀 것입니다. 이를 달성하기 위해 캔버스나 자바스크립트를 사용하지 않았으며 최종적으로 무작위 눈송이를 얻기 위해 CSS 전처리기를 덜 사용하기로 결정했습니다. 어떻게 무작위 눈송이를 덜 얻을 수 있을까요? 이는 CSS 작성을 좋아하는 사람들에게 매우 흥미로울 것입니다. [추천 튜토리얼: CSS 튜토리얼]

무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명

위 사진의 눈송이 효과가 꽤 멋지네요. 어떻게 구현하나요? less에는 다음과 같은 두 가지 특성이 있으므로 이를 사용하여 시나리오를 구현할 수 있습니다

1. 재귀 호출

사실 less에는 javascript의 for 루프와 유사한 기능이 없지만, less를 사용하여 구현할 수 있습니다. 조건부 판단 시 간단한 방법을 사용하면 똑똑한 프로그래머도 쉽게 재귀 호출을 구현할 수 있습니다

.snow(@n) when (@n > 0) {
 fn()//生成雪花函数fn(
 .snow((@n - 1));//再次执行函数fn() 
}
.snow(60);//执行次数

2. JavaScript 표현식 컴파일을 피하세요

Snowflake는 난수를 생성해야 하며, 더 적은 코드에 삽입하려면 JavaScript 표현식을 사용해야 합니다. 동시에 JavaScript 표현식이 Less에 의해 잘못 컴파일되는 것을 방지하려면 두 가지 사항을 이해해야 합니다.

LESS가 인식하지 못하는 일부 독점 구문의 경우 문자열 앞에 ~를 추가할 수 있습니다.

JavaScript 표현식은 더 적은 파일에서 사용되며 백틱과 함께 사용할 수 있습니다.

따라서 다음과 같이 임의 변위 및 임의 시간이 있습니다. size 코드

그래서 다음과 같은 Less 코드가 있습니다. 구현 방법에 대한 자세한 코드 설명에 주의하세요
다음 Less 코드는 빌드된 후 임의의 CSS 고정 눈송이 파일을 생성할 수 있으며, 이는 각 눈송이가 서로 다른 것을 결정합니다. 크기, 수평 변위, 수직 변위, 출현 위치, 출현 시간, 다양한 눈송이 크기, 다양한 낙하 속도, 육안으로 보이는 눈송이는 온라인에 접속하기 전에 무작위로 여러 번 프로젝트를 빌드해 볼 수 있습니다. 창문에 눈송이가 흩어져 있다.

* {
 padding: 0;
 margin: 0;
}
html, body {
 height: 100%;
}
//浏览器窗口宽度
@windowWidth: 750;
//雪花
.snow {
 &_wrap{
 position: relative;
 width: ~"@{windowWidth}px";
 height: 100%;
 overflow: hidden;
 background: rgba(14,99,69,1);
 margin: 0 auto;
 }
 //雪花初始化大小
 position: absolute;
 width:20px;
 height: 20px;
 &:after{
 content: '';
 position: absolute;
 left:0;
 top:0;
 width:20px;
 height: 20px;
 background-color:#fff;
 opacity:1;
 border-radius: 100%;
 filter:blur(5px);//此处使用css3滤镜来画雪花
 }
}
//随机雪花函数
.snow(@n) when (@n > 0) {
 .snow_@{n}{
 //水平方向上的位移
 left: ~"`Math.round(Math.random() * @{windowWidth})`px";
 //动画运行时间8~12秒,保证雪花有不同的移动速度
 animation: ~"snowani_@{n} `(-Math.random() * 4 + 8).toFixed(2)`s linear infinite";
 //动画提前出场时间,也就是垂直方向上位移
 animation-delay: ~"`(-Math.random() * 8 + 0.2).toFixed(2)`s";
 &:after{
  //雪花大小随机,0.5~1.2
  transform: ~"scale(`(Math.random() * 0.7 + 0.5).toFixed(2)`)";
 }
 }
 @keyframes ~"snowani_@{n}" {
 0%{
  transform: translateY(0);
 }
 100%{
  //垂直方向上高度,保证雪花有不同的移动速度
  transform: ~"translateY(`Math.round(Math.random() * 200 + 1600)`px)";
 }
 }
 .snow((@n - 1));
}
.snow(60);//生成雪花的数量

위 눈송이 코드는 다음과 같이 구성되어 있습니다.

무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명

HTML이라는 코드 한 줄도 있습니다

에멧이나 웹스톰을 에디터에서 설치하고 에멧을 연 후, 아래의 코드를 입력하고 Ctrl+E 단축키를 눌러주세요 키를 누르면 서로 다른 이름의 눈송이 라벨 60개가 생성됩니다

무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명

위 내용은 이 글의 전체 내용입니다. 이 글의 내용이 모든 사람의 학습이나 업무에 대한 특정 참고 및 학습 가치가 있기를 바랍니다. 질문이 있으면 메시지를 남겨서 소통할 수 있습니다.

위 내용은 무작위 눈 애니메이션을 구현하기 위해 덜 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 qdfuns.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제