네이티브 js_javascript 스킬로 구현되는 블라인드의 효과와 원리 소개

WBOY
풀어 주다: 2016-05-16 15:05:51
원래의
2772명이 탐색했습니다.

블라인드 본 적 있으신가요? 사진과 같이:

원칙:

그림에 표시된 것처럼 속이 빈 그리드는 각 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 &#63; 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 블라인드의 효과를 익히는 데 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿