허접 배너 Viewer 맛보기.
ITWeb/개발일반 2011. 12. 9. 16:07구글링 하면 아주 멋진거 많은데..
뭐.. 후배가 보여 달라면 보여줘야죠.. ㅋ
기교 이런거 하나도 없이 생짜 코드 들어 갑니다.
기본 컨셉은 linked list 를 바탕으로 작성을 했으나 코드를 보시면 전혀 그런 내용은 없습니다.
단순히 배열을 가지고 loop 돌리는게 전부 입니다. ㅡ.ㅡ;;
[구글검색 linkedlist]
- http://www.google.co.kr/search?q=javascript+linkedlist
[구현코드]
<!DOCTYPE html>
<html>
<head>
<title>BannerSlider</title>
<script type="text/javascript">
var bannerList = ['banner1.png', 'banner2.png', 'banner3.png', 'banner4.png', 'banner5.png']
var bannerSize = 4; // 이 숫자 바꾸면 그 크기만큼 돌아 갑니다.
var bannerIndexLast = bannerSize - 1;
var bannerIndexCurrent = 0;
var bannerIndexLeft;
var bannerIndexRight;
var bannerWidth = 320;
var bannerHeight = 48;
var imageList = new Array(bannerSize);
var swapIndex = 'front';
// 이건 잘 아시는 이미지 preload 입니다.
function bannerPreload () {
for ( var i=0; i<bannerSize; i++ ) {
imageList[i] = new Image();
imageList[i].src = bannerList[i];
}
bannerIndexLeft = bannerIndexLast;
bannerIndexRight = 1;
}
// 이름이 view 와 slide 로 되어 있는건 사실 slide 효과를 주기 위해 시작을 한거구요.
// 일단은 효과 빼고 배너 돌리는거 부터 보여 줄라고 이래 되었습니다.
function moveLeft () {
var adView;
var adSlide;
switch ( swapIndex ) {
case 'front' :
adView = document.getElementById('adFront');
adSlide = document.getElementById('adBack');
swapIndex = 'back';
break;
case 'back' :
adView = document.getElementById('adBack');
adSlide = document.getElementById('adFront');
swapIndex = 'front';
break;
}
// 이 부분은 예전에 작성한 DOM Linknig Element 를 이용해서 하면 더 좋겠지만
// 빠르게 보여 주다 보니..
// 이전 글 참고 : http://jjeong.tistory.com/522
adSlide.innerHTML = "<img src='"+bannerList[bannerIndexRight]+"' border='0' width='320px' height='48px'>";
leftSlide(adView, adSlide);
}
// 왼쪽 화살표 클릭 했을 때 sliding 될 배너의 위치를 지정하고 돌리기 위한 함수 임돠.
function leftSlide (adViewer, adSlider) {
var temp;
adViewer.style.left = '0px';
adSlider.style.left = '320px';
temp = adViewer.style.zIndex;
adViewer.style.zIndex = adSlider.style.zIndex;
adSlider.style.zIndex = temp;
adSlider.style.left = '0px';
bannerIndexLeftCalc();
}
// linkedilst 를 가장한 배열의 순서를 계산하는 함수 임돠.
function bannerIndexLeftCalc () {
bannerIndexLeft = bannerIndexCurrent;
bannerIndexCurrent = bannerIndexRight;
if ( bannerIndexRight == bannerIndexLast ) {
bannerIndexRight = 0;
} else {
bannerIndexRight++;
}
}
// 여기서 부터는 왼쪽과 반대 입니다.
function moveRight () {
var adView;
var adSlide;
switch ( swapIndex ) {
case 'front' :
adView = document.getElementById('adFront');
adSlide = document.getElementById('adBack');
swapIndex = 'back';
break;
case 'back' :
adView = document.getElementById('adBack');
adSlide = document.getElementById('adFront');
swapIndex = 'front';
break;
}
adSlide.innerHTML = "<img src='"+bannerList[bannerIndexLeft]+"' border='0' width='320px' height='48px'>";
rightSlide(adView, adSlide);
}
function rightSlide (adViewer, adSlider) {
var temp;
adViewer.style.left = '0px';
adSlider.style.left = '-320px';
temp = adViewer.style.zIndex;
adViewer.style.zIndex = adSlider.style.zIndex;
adSlider.style.zIndex = temp;
adSlider.style.left = '0px';
bannerIndexRightCalc();
}
function bannerIndexRightCalc () {
bannerIndexRight = bannerIndexCurrent;
bannerIndexCurrent = bannerIndexLeft;
if ( bannerIndexLeft == 0 ) {
bannerIndexLeft = bannerIndexLast;
} else {
bannerIndexLeft--;
}
}
bannerPreload();
</script>
</head>
<body style='margin:0px; padding:0px;' topmargin='0px' leftmargin='0px' marginheight='0px' marginwidth='0px'>
<div id='adWrap' style='width:320px; height:48px; line-height:48px; background-color:#000000; valign:center; color:#FFFFFF; text-align:center; z-index:0'>
<div id='arrowLeft' style='position:absolute; width:25px; height:48px; top:0px; left:0px; z-index:99'><a href="javascript:moveLeft();"><img src='arrow_left.jpg' border="0" width="25px" height="48px"></a></div>
<div id='arrowright' style='position:absolute; width:25px; height:48px; top:0px; left:295px; z-index:99'><a href="javascript:moveRight();"><img src='arrow_right.jpg' border="0" width="25px" height="48px"></a></div>
<div id='adFront' style='position:absolute; top:0px; left:0px; width:320px; height:48px; z-index:2'><img src='banner1.png' border="0" width="320px" height="48px"></div>
<div id='adBack' style='position:absolute; top:0px; left:0px; width:320px; height:48px; z-index:1'></div>
</div>
</body>
</html>
※ Code Refactoring 할 내용은 보시는 바와 같이 많이 있습니다. 그건 각자 알아서.. ㅎㅎ
※ 위 코드는 sliding 효과를 전제 하다 보니 <div> 를 두개 사용하게 된거구요.. 아래는 그냥 이미지 대체용 입니다. 코드는 완전 간단해 집니다.
// 그냥 좌우 확인해서.. image list 에 대한 array index 로만 replace 하는 내용 입니다.
// 뭐.. div.innerHTML 이 싫으신 분은 그냥 image.src 로 하셔도 크게 상관 없습니다.
// 이럴려면 <img> 에 id 를 부여하거나 tag name 으로 처리 하시거나요.
function bannerChange(dir) {
switch ( dir ) {
case 'left' :
if ( bannerIndexCurrent >= 4 ) {
bannerIndexCurrent = 0;
} else {
bannerIndexCurrent++;
}
break;
case 'right' :
if ( bannerIndexCurrent <= 0 ) {
bannerIndexCurrent = bannerIndexLast;
} else {
bannerIndexCurrent--;
}
break;
}
adView = document.getElementById('adFront');
adView.innerHTML = "<img src='"+bannerList[bannerIndexCurrent]+"' border='0' width='320px' height='48px'>";
}
<div id='arrowLeft' style='position:absolute; width:25px; height:48px; top:0px; left:0px; z-index:99'><a href="javascript:bannerChange('left');"><img src='arrow_left.jpg' border="0" width="25px" height="48px"></a></div>
<div id='arrowright' style='position:absolute; width:25px; height:48px; top:0px; left:295px; z-index:99'><a href="javascript:bannerChange('right');"><img src='arrow_right.jpg' border="0" width="25px" height="48px"></a></div>