예뜨락

롤링 배너 이해하는데 도움이 될것 같아 올립니다

· 12년 전 · 3196
배너나 혹은 공지등을 롤링 시킬때 사용하면 될거 같고
아래의 소스는 말 그대로 이해하시는데 도움을 드리고자 추가적인 작업을 하지 않은
작업물입니다
 
좀 더 사용의 편리성을 위한다면
클론 div 부분과 css를 자바스크립트로 만들어  돔( JavaScript HTML DOM ) 의 형태로 넣으면 되겠죠
 
 
 
 
이하 소스입니다
-----------------------------------------------------------------------------------------
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<style>
#cover1,#cover2,#cover3,#cover4,#cover5,#cover6,#cover7,#cover8,#cover9,#cover10{
     margin:  0px 0px 0px 0px;
     padding :0px 0px 0px 0px;
     width :200px;
     height :25px;
     background:#f2f2f2;
     border :solid 1px #ccc;
     font-family:굴림,돋움;
     font-size:9pt;
     line-height:120%;
     color:#787474;
     overflow : hidden;
}
#cover1{
     position :absolute;
     top   : 0px;
     left  : 0px;
}
#cover2{
     position :absolute;
     top   : 25px;
     left  : 0px;
}
#cover3{
     position :absolute;
     top   : 50px;
     left  : 0px;
}
#cover4{
     position :absolute;
     top   : 75px;
     left  : 0px;
}
#cover5{
     position :absolute;
     top   :100px;
     left  : 0px;
}
#cover6{
     position :absolute;
     top   : 125px;
     left  : 0px;
}
#cover7{
     position :absolute;
     top   : 150px;
     left  : 0px;
}
#cover8{
     position :absolute;
     top   : 175px;
     left  : 0px;
}
#cover9{
     position :absolute;
     top   : 200px;
     left  : 0px;
}
#cover10{
     position :absolute;
     top   : 225px;
     left  : 0px;
}
 
 
/* 커버보다는 2px 작게 */
#msg1,#msg2,#msg3,#msg4,#msg5,#msg6,#msg7,#msg8,#msg9,#msg10{
     position :absolute;
     top   : 0px;
     left  : 0px;
     margin:  0px 0px 0px 0px;
     padding :8px 0px 0px 10px;
     width:250px;
     height :15px;
     background:#f2f2f2;
     border :solid 0px #ccc;
     font-family:굴림,돋움;
     font-size:9pt;
     line-height:120%;
     color:#787474;
}
#clon_msg1,#clon_msg2,#clon_msg3,#clon_msg4,#clon_msg5,#clon_msg6,#clon_msg7,#clon_msg8,#clon_msg9,#clon_msg10{
     position :absolute;
     top   : 25px;
     left  : 0px;
     margin:  0px 0px 0px 0px;
     padding :8px 0px 0px 10px;
     width:250px;
     height :15px;
     background:#f7f7f7;
     border :solid 0px #ccc;
     font-family:굴림,돋움;
     font-size:9pt;
     line-height:120%;
     color:#787474;
}
</style>
<script>
  function $(id){
      var element="";
      if(id==""){
         return false;
      }  
      else{
         element= document.getElementById(id);
         return element;
      }
  }

  function rolling(num){
      if(!num)num=1; //초기에 돌려줄 값
      //객체가 없다면 초기값으로 돌림
      if(!$("msg"+num)){
          num=1;
        //clearTimeout(tH); 더 이상 돌리지 않을때 사용
      }
      // 재귀함수 호출
      var tH;
      tH=setTimeout(function () { rolling(num); },1);
      if($("msg"+num)){ //객체가 존재한다면
         //객체를 위로 이동
         $("msg"+num).style.top=$("msg"+num).offsetTop-1+"px";
         $("clon_msg"+num).style.top=$("clon_msg"+num).offsetTop-1+"px";
         if($("msg"+num).offsetTop<=-$("msg"+num).offsetHeight){
            $("msg"+num).style.top      = 0+"px";
            $("clon_msg"+num).style.top = parseInt($("clon_msg"+num).offsetHeight)+"px";
            clearTimeout(tH);
            // 다음에 움직일 값을 지정
            num=parseInt(num)+1;
            tH=setTimeout(function () { rolling(num); },3000);
         }
      }
  }
// 윈도우 온로드시 풀어서 사용하세요
//window.onload=function(){
//rolling();
//}
</script>
</head>
<body>
<div id="rollingDIV" style="position:absolute; left:750px; top:150px;">

     <div id="cover1">
          <div id="msg1">
               무궁화1 꽃이 피었습니다
          </div>
          <div id="clon_msg1">
               무궁화1 꽃이 피었습니다
          </div>
     </div>
     <div id="cover2">
          <div id="msg2">
               무궁화2 꽃이 피었습니다
          </div>
          <div id="clon_msg2">
               무궁화2 꽃이 피었습니다
          </div>
     </div>
     <div id="cover3">
          <div id="msg3">
               무궁화3 꽃이 피었습니다
          </div>
          <div id="clon_msg3">
               무궁화3 꽃이 피었습니다
          </div>
     </div>
     <div id="cover4">
          <div id="msg4">
               무궁화4 꽃이 피었습니다
          </div>
          <div id="clon_msg4">
               무궁화4 꽃이 피었습니다
          </div>
     </div>
     <div id="cover5">
          <div id="msg5">
               무궁화5 꽃이 피었습니다
          </div>
          <div id="clon_msg5">
               무궁화5 꽃이 피었습니다
          </div>
     </div>
     <div id="cover6">
          <div id="msg6">
               무궁화6 꽃이 피었습니다
          </div>
          <div id="clon_msg6">
               무궁화6 꽃이 피었습니다
          </div>
     </div>
     <div id="cover7">
          <div id="msg7">
               무궁화7 꽃이 피었습니다
          </div>
          <div id="clon_msg7">
               무궁화7 꽃이 피었습니다
          </div>
     </div>
     <div id="cover8">
          <div id="msg8">
               무궁화8 꽃이 피었습니다
          </div>
          <div id="clon_msg8">
               무궁화8 꽃이 피었습니다
          </div>
     </div>
     <div id="cover9">
          <div id="msg9">
               무궁화9 꽃이 피었습니다
          </div>
          <div id="clon_msg9">
               무궁화9 꽃이 피었습니다
          </div>
     </div>
     <div id="cover10">
          <div id="msg10">
               무궁화10 꽃이 피었습니다
          </div>
          <div id="clon_msg10">
               무궁화10 꽃이 피었습니다
          </div>
     </div>
</div>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<a href="#" onclick="rolling();">클릭</a>
</body>
</html>
 
 
 
-----------------------------------------------------------------------------------------
이상 소스입니다
 
 
function $(id) 이란 평션은 
document.getElementById("객체 아이디") 를 일일이 쓰기 귀챦아
제 편의상 만들어 쓰는 것이므로 제이쿼리등과 충돌할 수 있으니
상황에 맞게 사용하세요
$("msg"+num)  => document.getElementById("msg"+num)
 
 
-기능의 이해-
우선 롤링 되어야할 객체( 이하 롤링 ) 와 롤링후 밑에서 똑같이 올라와야 할 클론(복사본 : 이하 클론 )이 있어야 합니다
원본이 주어진 박스 안에서 벗어나게 되면 그다음 복사본이 그 자리를 올라오면서 메꾸어 줍니다
순차적으로 1번부터 롤링되고 주어진 숫자 ( 여기선 10개를 올렸습니다 ) 10개의 롤링이 끝나면 다시 1번으로 돌아가
롤링을 시작합니다
 
 
- 주의 사항 -
하나가 아닌 여러개의 롤링을 써야 하기에
cover1,cover2 와 같이 아이디에는 영문명 숫자로 아이디를 순차적으로 만들어야 함수에서 호출이 됩니다
 
 
- css-

#cover1 ~ #cover10
롤링되는 메세지 박스와 클론 박스를 담아두는 테이블입니다
여기서 중요한 것은 
    overflow : hidden;    // 정해진 규격의 크기 이상이 되면 보여지지 않아야 하기에 쓰입니다
     position :absolute;  //제일 바깥쪽 div를 기준으로 위치를 잡아야 하므로 포지션을 씁니다
     top   : 0px;         //높이 위치는  롤링과 클론의 높이 만큼 더해줍니다 다음것은 25px 그 다음은 50px 그래야 정렬이 됩니다
     left  : 0px;           //왼쪽 위치는 0px로 동일하게 잡아줍니다

#msg1 ~ #msg10
     position :absolute;  // 커버를 기준으로 하기에 포지션을 씁니다
     top   : 0px;             // 무조건 0px 입니다
     left  : 0px;            // 무조건 0px 입니다
#clon_msg1~ #clon_msg10 
    position :absolute;
     top   : 25px;
     left  : 0px;
    클론이며 위와 마찬가지의 속성을 가지되
    주의할 점은 top의 위치입니다
    롤링 밑에 바로 붙어 있어야 하기 때문입니다
 
   롤링 과 클론의 배경색이 약간 틀립니다 이는 음영을 주어 롤링되고 있다는 느낌을 더 주기 위해서 입니다
 
 
- 자바스크립트 -
  호출은
 <a href="#" onclick="rollong();">클릭</a> 와 같이 합니다
 윈도우 로드후 함수 실행은 위의 온로드 함수의 주석을 풀면 됩니다

  function rollong(num)  함수 설명
 - 함수 호출시 매개 변수가 없습니다
       if(!num)num=1; //초기에 돌려줄 값
- 매개 변수가 없으니 매개 변수로 쓸 넘버 값을 지정합니다 넘버 값은 여러개의 롤링 클론들의 아이디를 호출할 때 씁니다
  ( 아이디 값 msg1 , msg2 ~ msg10 )

      //객체가 없다면 초기값으로 돌림
      if(!$("msg"+num)){
          num=1;
        //clearTimeout(tH); 더 이상 돌리지 않을때 사용
      }
-  위에서 지정한 초기에 돌려줄 값에 의해 롤링이 시작되고 주어진 갯수만큼 다하고 나면 더이상 진행을 하지 않거나
    또는 처음으로 되돌려 1번부터 롤링을 시켜야 하는데 그 때 쓰는 초기화 입니다
 

      // 재귀함수 호출
      var tH;
      tH=setTimeout(function () { rolling(num); },1);
 
-  재귀함수를 사용해서 롤링 함수를 정해진 시간 이내에 계속적으로 호출합니다
 

      if($("msg"+num)){ //객체가 존재한다면
         //객체를 위로 이동
         $("msg"+num).style.top=$("msg"+num).offsetTop-1+"px";
         $("clon_msg"+num).style.top=$("clon_msg"+num).offsetTop-1+"px";
 
- 롤링과 클론을  재귀 함수 호출로 인해 1픽셀씩 위로 올립니다
 
         if($("msg"+num).offsetTop<=-$("msg"+num).offsetHeight){
- 롤링의 위로 올라간 현재 위치가 롤링의 크기보다 벗어나면 ( 앞에 마이너스가 붙었습니다 ) 롤링과 클론의 높이를
  원점으로 돌림 롤링은 0으로 클론은 롤링 아래로 (롤링과 클론의 높이가 같으므로 자신의 높이만큼 밑으로 낮춰줬음 )
 

            $("msg"+num).style.top      = 0+"px";
            $("clon_msg"+num).style.top = parseInt($("clon_msg"+num).offsetHeight)+"px";
            clearTimeout(tH);
- 위치를 원점으로 돌린 후 함수 종료
 
 

            // 다음에 움직일 값을 지정
            num=parseInt(num)+1;
- 다음번을 실행하기 위해서 넘버값을 1 추가해줌
            tH=setTimeout(function () { rolling(num); },3000);
- 다음번 재귀함수 호출 1번이 끝나면 2번을 2번이 끝나면 3번을 계속해서 10번까지 호출

         }
      }
 
 
 
 
 
 
 
 

첨부파일

롤링.html (5.8 KB) 72회 2013-11-22 01:09
|
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
12년 전 조회 650
12년 전 조회 745
12년 전 조회 1,195
12년 전 조회 1,141
12년 전 조회 1,164
12년 전 조회 1,313
12년 전 조회 737
12년 전 조회 923
12년 전 조회 973
12년 전 조회 580
12년 전 조회 995
12년 전 조회 685
12년 전 조회 757
12년 전 조회 422
12년 전 조회 1,155
12년 전 조회 1,447
12년 전 조회 466
12년 전 조회 418
12년 전 조회 1,376
12년 전 조회 465
12년 전 조회 1,048
12년 전 조회 858
12년 전 조회 1,284
12년 전 조회 1,353
12년 전 조회 6,053
12년 전 조회 1,372
12년 전 조회 600
12년 전 조회 451
12년 전 조회 476
12년 전 조회 579
12년 전 조회 822
12년 전 조회 1,448
12년 전 조회 951
12년 전 조회 1,182
12년 전 조회 448
12년 전 조회 546
12년 전 조회 2,542
12년 전 조회 1,625
12년 전 조회 1,343
12년 전 조회 3,182
12년 전 조회 594
12년 전 조회 2,367
12년 전 조회 1,936
12년 전 조회 1,783
12년 전 조회 1,864
12년 전 조회 810
12년 전 조회 1,354
12년 전 조회 1,352
12년 전 조회 836
12년 전 조회 3,197
12년 전 조회 495
12년 전 조회 997
12년 전 조회 1,399
12년 전 조회 1,823
12년 전 조회 665
12년 전 조회 1,369
12년 전 조회 740
12년 전 조회 2,337
12년 전 조회 782
12년 전 조회 478
12년 전 조회 694
12년 전 조회 2,256
12년 전 조회 1,778
12년 전 조회 4,090
12년 전 조회 1,378
12년 전 조회 1,813
12년 전 조회 1,197
12년 전 조회 1,183
12년 전 조회 676
12년 전 조회 730
12년 전 조회 1,645
12년 전 조회 750
12년 전 조회 508
12년 전 조회 1,073
12년 전 조회 1,411
12년 전 조회 665
12년 전 조회 768
12년 전 조회 1,006
12년 전 조회 1,779
12년 전 조회 680
12년 전 조회 922
12년 전 조회 2,883
12년 전 조회 659
12년 전 조회 569
12년 전 조회 462
12년 전 조회 1,237
12년 전 조회 1,051
12년 전 조회 3,706
12년 전 조회 859
12년 전 조회 732
12년 전 조회 605
12년 전 조회 484
12년 전 조회 1,005
12년 전 조회 734
12년 전 조회 870
12년 전 조회 396
12년 전 조회 434
12년 전 조회 567
12년 전 조회 971
12년 전 조회 956
🐛 버그신고