자바스크립트로 이미지 롤링 관련 문의드립니다.

· 12년 전 · 2595
<style>
.image_list {overflow: hidden;position: relative;height: 177px;width: 861px; cursor:pointer; clear:both;}
.image_list .images {position:absolute; display:none; }
</style>
<script type="text/javascript">
<!--
/*function RollImage(json){
 this.current_img = 0;
 this.next_img = 1;
 this.list_area = e(json.list_area);
 this.image_list = this.list_area.getElementsByTagName("DIV");
 this.img_cnt = this.image_list.length-1;
 this.roll_time = json.roll_time;
 this.move_time = json.move_time;
 this.coord_x1 = 0;
 this.coord_x2 = this.list_area.offsetWidth;
 this.moveAt = json.moveAt;
 setRoll(this);
}
//이미지 롤링 기본 세팅하기
function setRoll(o){
 o.coord_x1 = 0;
 o.coord_x2 = o.list_area.offsetWidth;
 
 
 o.image_list[o.next_img].style.display = "block";
 o.image_list[o.next_img].style.left = o.coord_x2+"px";
 
 setTimeout(function(){imgMove(o)},o.roll_time);
}
//이미지를 움직이게 한다.
function imgMove(o){
 o.image_list[o.current_img].style.left = o.coord_x1 + "px";
 o.image_list[o.next_img].style.left = o.coord_x2 + "px";
 o.coord_x1 -= o.moveAt;
 o.coord_x2 -= o.moveAt;
 
 if(o.coord_x1 < (-1*o.list_area.offsetWidth) ) {
  o.current_img = o.next_img;
  o.next_img += 1;
  if(o.current_img == o.img_cnt) o.next_img = 0;
  clearTimeout(o.move_timer);
  o.roll_timer = setTimeout(function(){setRoll(o)},o.roll_time);
  return;
 }
 o.move_timer = setTimeout(function(){imgMove(o)},o.move_time);
}
*/
function RollImage(json){
 //이미지 롤링 설정값
 var config = {
  currentImg : 0,
  nextImg : 1,
  listArea : e(json.list_area),
  imageList : e(json.list_area).getElementsByTagName("DIV"),
  imgCnt : e(json.list_area).getElementsByTagName("DIV").length-1, //0부터 시작
  rollTime : json.roll_time,
  moveTime : json.move_time,
  coordX1 : 0,
  coordX2 : e(json.list_area).offsetWidth,
  coordY : e(json.list_area).offsetHeight,
  moveAt : json.moveAt,
  direction : json.direction,
  label : e(json.label),
  labelType : json.labelType
 };
 
 labelBind(config); //라벨(버튼) 바인드
 setRoll(config); //롤링 시작
 rollPause(config); //마우스 오버시 롤링 멈춤
 
 //이미지 롤링 기본 세팅하기
 function setRoll(c){
  c.coordX1 = 0;
  c.coordX2 = c.listArea.offsetWidth;
  c.coordY = c.listArea.offsetHeight;
  if(c.direction=="right" || c.direction=="down"){
   c.coordX2 = c.coordX2 * -1;
   c.coordY = c.coordY * -1;
  }
  
  c.imageList[c.nextImg].style.display = "block";
  setPosition(c);
  rollOver(c)
  //c.imageList[c.nextImg].style.left = c.coordX2+"px";
  
  c.rollTimer = setTimeout(function(){imgMove(c)},c.rollTime);
 };
 //이미지를 움직이게 한다.
 function imgMove(c){
  if(c.direction == "left" || c.direction == "right"){
   c.imageList[c.currentImg].style.left = c.coordX1 + "px";
   c.imageList[c.nextImg].style.left = c.coordX2 + "px";
  }else if(c.direction == "up" || c.direction == "down"){
   c.imageList[c.currentImg].style.top = c.coordX1 + "px";
   c.imageList[c.nextImg].style.top = c.coordY + "px";
  }
  //alert(c.imageList[c.nextImg].style.left);
  var moveAt = parseInt(c.moveAt);
  if (c.direction == "left"){
   c.coordX1 -= moveAt;
   c.coordX2 -= moveAt;
  }else if(c.direction == "right"){
   c.coordX1 += moveAt;
   c.coordX2 += moveAt;
  }else if(c.direction=="up"){
   c.coordX1 -= moveAt;
   c.coordY -= moveAt;
  }else if(c.direction=="down"){
   c.coordX1 += moveAt;
   c.coordY += moveAt;
  }
  
  //if(c.coordX1 < (-1*c.listArea.offsetWidth) ) {
  if( isNextImgRoll(c) ) {
   c.currentImg = c.nextImg;
   c.nextImg += 1;
   if(c.currentImg == c.imgCnt) c.nextImg = 0;
   clearTimeout(c.moveTimer);
   clearTimeout(c.rollTimer);
   setRoll(c);
   return;
  }
  c.moveTimer = setTimeout(function(){imgMove(c)},c.moveTime);
 };
 
 //다음 이미지 롤링 해야하는지 확인
 function isNextImgRoll(c){
  var d = c.direction;
  if(d=="left" && c.coordX2 < 0 ) return true;
  else if(d=="right" && c.coordX2 > 0) return true;
  else if(d=="up" && c.coordY < 0 ) return true;
  else if(d=="down" && c.coordY > 0) return true;
  return false
 };
 //롤링 방향에 따른 두번째 이미지 위치 좌표 설정
 function setPosition(c){
  var d = c.direction;
  if(d=="left") c.imageList[c.nextImg].style.left = c.listArea.offsetWidth+"px";
  else if(d=="right") c.imageList[c.nextImg].style.left = (-1 * c.listArea.offsetWidth) + "px";
  else if(d=="up") c.imageList[c.nextImg].style.top = c.listArea.offsetHeight + "px";
  else if(d=="down") c.imageList[c.nextImg].style.top = (-1 * c.listArea.offsetHeight) + "px";
  //alert(c.imageList[c.nextImg].style.left);
 };
 
 //onmouseover 시 움직임 멈춤
 function rollPause(c){
 //alert(c.listArea.onmouseover);
  c.listArea.onmouseover = function(){
   clearTimeout(c.rollTimer);
  }
  c.listArea.onmouseout = function(){
   //alert("c.listArea.onmouseout");
   setRoll(c);
  }
 };
 //라벨과 바인드
 function labelBind(c){
  if(c.label == null) return; //라벨을 사용하지 않으면 아래는 실행되지 않는다.
  var labels = c.label.getElementsByTagName(c.labelType);
  c.label.onmouseover = function(event){ //라벨영역에 마우스가 오면
   var evt = event || window.event;
   var t = evt.target || evt.srcElement;
   for(n in labels){
    if(labels[n] == t){
     //c.imageList[c.currentImg].style.display = "none";
     c.currentImg = parseInt(n);
     c.nextImg = parseInt(n)+1;
     if(c.currentImg == c.imgCnt) c.nextImg = 0;
     clearTimeout(c.rollTimer);
     viewImg(c);
     rollOver(c);
     break;
    }
   }
   //alert(event.srcElement)
  }
  
  c.label.onmouseout = function(event){
   var evt = event || window.event;
   var t = evt.target || evt.srcElement;
   for(n in labels){
    if(labels[n]==t){
     setRoll(c);
     break;
    }
   }
  }
 };
 //라벨 onmouseover 시 클래스 적용
 function rollOver(c){
  if(c.label == null) return;
  var els = c.label.getElementsByTagName(c.labelType);
  
  if(c.labelType == "img"){
   
   for(n in els){
    if(typeof els[n] == "object"){
     if(n == c.currentImg){
      els[n].src = els[n].getAttribute("oversrc");
     }else{
      els[n].src = els[n].getAttribute("outsrc");
     }
    }
   }
  }else{
   for(n in els){
    if(typeof els[n] == "object"){
     if(n == c.currentImg){
      var ocss = els[n].className;
      els[n].className = ocss+" "+els[n].getAttribute("overcss");
     }else{
      els[n].className = els[n].getAttribute("outcss");
     }
    }
   }
  }
 }
 //라벨에서 선택된 이미지 보이기
 function viewImg(c){
  //alert(c.currentImg);
  for(n=0; n<c.imgCnt+1; n++) {
   c.imageList[n].style.display = "none";
  }
  
  c.imageList[c.currentImg].style.left = "0px";
  c.imageList[c.currentImg].style.top = "0px";
  c.imageList[c.currentImg].style.display = "block";
 };
}
function debug(t){
e("dis").innerHTML = t + "<br>";
}
//id값으로 객체 반환
function e(id){
 var o = document.getElementById(id);
 if(typeof o == undefined || o == null) { return null;}
 return o;
}
//-->
</script>
</head>
<body>
<div class="image_list" id="image_list_1">
 <div class="images" style="display:block"><img src="/web/upload/main-benner4-1.jpg" border="0"></div>
  <div class="images"><img src="/web/upload/main-benner4-2.jpg" border="0"></div>
 <div class="images"><img src="/web/upload/main-benner4-3.jpg" border="0"></div>
</div>
<script type="text/javascript">
<!--
var j1 = {
 "list_area":"image_list_1",
 "moveAt":"177",
 "roll_time":"5000",
 "move_time":"100",
 "direction":"down",
 "label":"",
 labelType : ""
};
new RollImage(j1);
//oj1.setRoll();
//-->
</script>               
 
 
위소스로 이미지 파일을 아래로 롤링되도록 하고 있습니다.
롤링되는 효과가 마음에 들지 않아서 롤링되는 효과를 파워포인트 애니메이션효과에 있는 닦아내기 효과
처럼 하고 싶은데...transition 이걸로 닦아내기 효과를 볼 수있다고 하던데....안되더라구요..ㅠㅠ
 
혹시 알고 계시면 알려주시면 감사하겠습니다.ㅠㅠ
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
12년 전 조회 1,087
12년 전 조회 981
12년 전 조회 1,639
12년 전 조회 1,381
12년 전 조회 1,921
12년 전 조회 2,990
12년 전 조회 921
12년 전 조회 1,170
12년 전 조회 1,095
12년 전 조회 3,730
12년 전 조회 1,394
12년 전 조회 1,634
12년 전 조회 1,277
12년 전 조회 961
12년 전 조회 1,105
12년 전 조회 1,784
12년 전 조회 1,005
12년 전 조회 1,008
12년 전 조회 2,409
12년 전 조회 1,569
12년 전 조회 1,513
12년 전 조회 1,539
12년 전 조회 1,183
12년 전 조회 1,307
12년 전 조회 1,220
12년 전 조회 1,664
12년 전 조회 915
12년 전 조회 986
12년 전 조회 1,021
12년 전 조회 1,620
12년 전 조회 877
12년 전 조회 1,570
12년 전 조회 1,605
12년 전 조회 925
12년 전 조회 1,673
12년 전 조회 2,195
12년 전 조회 1,734
12년 전 조회 1,748
12년 전 조회 1,501
12년 전 조회 930
12년 전 조회 950
12년 전 조회 2,804
12년 전 조회 981
12년 전 조회 817
12년 전 조회 1,265
12년 전 조회 1,407
12년 전 조회 1,352
12년 전 조회 1,007
12년 전 조회 2,356
12년 전 조회 2,596
12년 전 조회 1,463
12년 전 조회 1,029
12년 전 조회 2,669
12년 전 조회 7,932
12년 전 조회 2,384
12년 전 조회 1,177
12년 전 조회 1,529
12년 전 조회 1,267
12년 전 조회 2,491
12년 전 조회 2,193
12년 전 조회 934
12년 전 조회 1,166
12년 전 조회 2,169
12년 전 조회 1,328
12년 전 조회 1,133
12년 전 조회 770
12년 전 조회 1,442
12년 전 조회 1,170
12년 전 조회 2,108
12년 전 조회 1,105
12년 전 조회 1,105
12년 전 조회 1,585
12년 전 조회 995
12년 전 조회 1,091
12년 전 조회 1,550
12년 전 조회 1,477
12년 전 조회 1,514
12년 전 조회 1,676
12년 전 조회 1,097
12년 전 조회 1,272
12년 전 조회 1,328
12년 전 조회 916
12년 전 조회 1,337
12년 전 조회 1,009
12년 전 조회 1,098
12년 전 조회 769
12년 전 조회 1,490
12년 전 조회 1,781
12년 전 조회 805
12년 전 조회 750
12년 전 조회 1,738
12년 전 조회 797
12년 전 조회 1,394
12년 전 조회 1,185
12년 전 조회 1,618
12년 전 조회 1,689
12년 전 조회 6,381
12년 전 조회 1,714
12년 전 조회 959
12년 전 조회 802