하나.doMove 함수 봉인 떨림 원리 투명도 봉인

3614 단어

doMove()

window.onload=function(){ 
    var oBtn1 = document.getElementById("btn1");
    var oDiv = document.getElementById("div1");
   oBtn1.onclick=function(){
       doMove(oDiv,'top',5,400,function(){
           doMove(oDiv,'left',3,800);
       });
   }
    oDiv.timer=null;
    function doMove(obj,attr,dir,target,endFn){
            dir=parseInt(getStyle(obj,attr))target && dir>0 || speed
  • 대략 논리
  • doMove(대상, 스타일 속성, 걸음걸이, 목표 값, 리셋 함수)
  • 보폭이 목표치보다 작으면 정수이고 그렇지 않으면 마이너스라고 판단한다
  • 사용하기 전에 타이머를 정지합니다(클릭할 때마다 타이머가 원래의 기초 위에서 중복 실행되는 것을 방지하기 위해서)
  • 타이머 함수를 설정하여 기존의 스타일 속성 값에 걸음 길이를 추가합니다
  • 만약에 속도가 목표치보다 크면 걸음걸이 길이가 정수나 속도가 목표치보다 작고 걸음걸이가 음수라면 속도가 대응하는 목표치와 같다고 판단(게다가 걸음걸이 판단은 반대 버튼을 누르면 원위치로 회귀하는 것을 방지하기 위해)
  • 그리고 속도값을 대상에게 직접 부여하는 스타일
  • 최종 판단: 속도치가 목표치와 같으면 타이머를 정지한다.이와 동시에 함수가 되돌아오면 실행합니다

  • 떨림 원리 및 실현 과정

    window.onload=function(){
        var oImg=document.getElementById('img1');
        oImg.onclick=function(){
                var pos=parseInt(getStyle(oImg,'left'));
                var arr=[];
                var timer=null;
                var num=0;
                for(var i=20;i>0;i-=5){
                    arr.push(i,-i);
                }
                arr.push(0);
               clearInterval(timer);
               timer=setInterval(function(){
                   oImg.style.left=pos+arr[num]+"px";
                   num++;
                   if(num==arr.length){
                       clearInterval(timer)
                   }
               },50);
        }
    }
    
    
  • 떨림 원리
  • 우선 속성 스타일 설정이 있어야 한다
  • 스타일 속성 값을 가져옵니다
  • 빈 그룹을 정의합니다
  • 빈 타이머 변수를 정의합니다
  • num을 0으로 정의합니다
  • 디더링의 최대 수치는 크게부터 작게까지 0까지 수치차는 디더링 과정에서 i를 수조에 눌러 넣는다
  • 반복이 끝나면arr수조에서 0을 보충합니다
  • 타이머를 먼저 비워라
  • 타이머 설정 대상 스타일은 원래 위치에 수조의 수치를 일일이 추가합니다
  • num++가 추진되고 있습니다
  • num의 수치가 수조의 길이 정지 타이머와 같다는 것을 안다

  • 떨리는 함수 봉인

    shake(oImg,'top');
    function shake(obj,attr,endFn){
        var pos=parseInt(getStyle(obj,attr));
        var arr=[];
        var num=0;
        for(var i=20;i>0;i-=5){arr.push(i,-i);  }
        arr.push(0);
        clearInterval(obj.time);
        obj.time=setInterval(function(){
            obj.style[attr]=pos+arr[num]+"px";
            num++;
            if(num==arr.length){
                clearInterval(obj.time);
                endFn&&endFn();
            }
        },50);
    }
    

    투명도 포장

    function opacity(obj, num, target, endFn) {
        
            num = getStyle(obj, 'opacity')*100 < target ? num : -num;
            
            clearInterval( obj.opacity );
            
            obj.opacity = setInterval(function () {
                
                var speed = parseInt(getStyle(obj, 'opacity')*100) + num;
                
                if ( speed > target && num > 0 || speed < target && num < 0 ) {
                    speed = target;
                }
                
                obj.style.opacity = speed/100;
                obj.style.filter = 'alpha(opacity='+ speed +')';
                
                if ( speed == target ) {
                    clearInterval( obj.opacity );
                    endFn && endFn();
                }
    
            }, 20);
    }
    

    좋은 웹페이지 즐겨찾기