블라인드 본 적 있으신가요? 사진과 같이:
원칙:
그림에 표시된 것처럼 속이 빈 그리드는 각 li와 같습니다. 이에 대한 상대 위치 속성을 설정하고 Overflow:hidden을 설정합니다. 검은색 블록은 li 하위 요소이고 높이는 li 높이의 두 배입니다. 절대 속성을 설정합니다. 변화를 얻기 위해 상위 값을 변경하는 것입니다! (오른쪽 상단의 추가 블록은 이 사진과 관련이 없습니다)
레이아웃 분석:
상위는 바꿀 가치가 있다는 점에 유의하세요! 기본적으로 top=0일 경우 "1층 벌크"로 표시되며, top=-40px일 경우 li의 하위 요소는 40px 위로 이동합니다. 이때 표시되는 내용은 "1층 벌크"입니다. p 요소의 래핑 레이어 div에 주목하세요
JS 분석:
1. 효과를 얻으려면 여러 개의 타이머를 켜야 합니다
2. 반대방향으로 실행
3. 여러 세트의 운동을 수행하세요
4. 쌓이면 탈구감이 생긴다
5. 시간 간격 애니메이션 생성
JS 코드는 다음과 같습니다.
<script> window.onload = function(){ var oUl = document.getElementById('ul1'); var oUl2 = document.getElementById('ul2'); toShow(oUl); //每四秒执行一次 setTimeout(function(){ toShow(oUl2); },4000); function toShow(obj){ var aDiv = obj.getElementsByTagName('div'); var iNow = 0; var timer = null; var bBtn = true; setInterval(function(){ toChange(); },2000); function toChange(){ timer = setInterval(function(){ if(iNow==aDiv.length){ clearInterval(timer); iNow = 0; bBtn = !bBtn; } else if(bBtn){ startMove(aDiv[iNow],{top:0},function(){ var p = document.getElementsByClassName('p-2'); for(var i=0; i<p.length;i++){ p[i].style.background = 'red'; } }); iNow++; } else{ startMove(aDiv[iNow],{top:-30}); iNow++; } },100); } } }; //运动框架 function startMove(obj,json,endFn){ clearInterval(obj.timer); obj.timer = setInterval(function(){ var bBtn = true; for(var attr in json){ var iCur = 0; iCur = parseInt(getStyle(obj,attr)) || 0; var iSpeed = (json[attr] - iCur)/8; iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); if(iCur!=json[attr]){ bBtn = false; } obj.style[attr] = iCur + iSpeed + 'px'; } if(bBtn){ clearInterval(obj.timer); if(endFn){ endFn.call(obj); } } },30); } //获取非行间样式 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } </script>
다운로드 주소: 블라인드 효과를 얻기 위한 js
이상이 이 글의 전체 내용입니다. js 블라인드의 효과를 익히는 데 도움이 되기를 바랍니다.