jquery.banner.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. $(function() {
  2. var f_nBnrCnt = 0; // jQBanner를 사용해서 화면에 출력되는 베너수
  3. $.f_varBanner = {
  4. defaults: {
  5. /* 내부적으로 쓰이는 변수 */
  6. objScr: null, // 스크린 영역
  7. objBtn: null, // 버튼 영역
  8. objTimer: null, // 타이머
  9. nOrderNo: 999, // 현재 선택된 레이어
  10. nOrderNoBtn: -1, // 버튼 선택시 레이어
  11. /* 초기세팅이 가능한 필수 변수 */
  12. nWidth: 0, // 베너 스크린 영역 폭
  13. nHeight: 0, // 베너 스크린 영역 높이
  14. nCount: 0, // 베너 스크린 영역에 속해있는 레이어의 수
  15. isActType: "none", // 베너 액션 타입 none,left,right,up,down,fade,page
  16. /* 초기세팅이 가능한 옵션 변수 */
  17. isShuffle: "N", // 베너 레이어들의 셔플 여부 Y:셔플,N:순차적
  18. isBtnAct: "mouseover", // 버튼 작동방식 mouseover,click
  19. isBtnType: "img", // 버튼 타입 img,li
  20. nStartUp: 300, // 스타트 시 첫 레이어의 FadeIn 속도
  21. nDelay: 5000, // 딜레이
  22. nSpeed: 500, // 액션시의 속도
  23. nSpeedFade: 300, // 페이드 관련 액션에서 버튼 작동시 속도의 교정값 [되도록 고정]
  24. isStartFade:"Y", // 스타트 FadeIn 효과 여부 [프로그램으로 스크린을 Display:block 처리할 경우 사용]
  25. isStartDelay:"N" // 스타트시 딜레이를 가지고 실행 [무거운 페이지의 경우 딜레이를 가지고 초기화]
  26. }
  27. };
  28. $.fn.jQBanner = function(defaults){
  29. var config = $.extend({}, $.f_varBanner.defaults, defaults);
  30. var isIEChk = jsBrowserCheck();
  31. config.objScr = "#"+this.attr("id")+" .clsBannerScreen";
  32. config.objBtn = "#"+this.attr("id")+" .clsBannerButton";
  33. if (config.isStartDelay=="Y" && isIEChk==true) {
  34. /* 스타트 딜레이 처리 */
  35. if (f_nBnrCnt>=0 && f_nBnrCnt<=3) {
  36. setTimeout( function(){jsBanInit(config)}, f_nBnrCnt*100);
  37. } else if (f_nBnrCnt>3 && f_nBnrCnt<=6) {
  38. setTimeout( function(){jsBanInit(config)}, f_nBnrCnt*200);
  39. } else if (f_nBnrCnt>6 && f_nBnrCnt<=10) {
  40. setTimeout( function(){jsBanInit(config)}, f_nBnrCnt*300);
  41. } else if (f_nBnrCnt>10) {
  42. setTimeout( function(){jsBanInit(config)}, 400);
  43. }
  44. f_nBnrCnt++;
  45. } else {
  46. jsBanInit(config);
  47. }
  48. return this;
  49. };
  50. function jsBanInit(config) {
  51. var nPosFix;
  52. /* 베너 스크린 CSS 설정 */
  53. $(config.objScr).css({'position':'relative','height':config.nHeight+'px','width':config.nWidth+'px','overflow':'hidden'});
  54. /* 첫 레이어 선택 */
  55. config.nOrderNo = (config.nOrderNo==999) ? Math.floor(Math.random() * config.nCount):config.nOrderNo-1;
  56. /* 액션 타입에 따른 초기 세팅 */
  57. if (config.isActType == "left") {
  58. $(config.objScr+" div").each(function(i){
  59. nPosFix = (config.nOrderNo==i)?0:config.nWidth;
  60. $(this).css({'position':'absolute','top':'0','left':(-1*nPosFix)+'px'});
  61. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  62. $(this).fadeIn(config.nStartUp);
  63. }
  64. $(this).attr("divno",i);
  65. });
  66. } else if (config.isActType == "right") {
  67. $(config.objScr+" div").each(function(i){
  68. nPosFix = (config.nOrderNo==i)?0:config.nWidth;
  69. $(this).css({'position':'absolute','top':'0','left':nPosFix+'px'});
  70. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  71. $(this).fadeIn(config.nStartUp);
  72. }
  73. $(this).attr("divno",i);
  74. });
  75. } else if (config.isActType == "up") {
  76. $(config.objScr+" div").each(function(i){
  77. nPosFix = (config.nOrderNo==i)?0:config.nHeight;
  78. $(this).css({'position':'absolute','top':(-1*nPosFix)+'px','left':'0'});
  79. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  80. $(this).fadeIn(config.nStartUp);
  81. }
  82. $(this).attr("divno",i);
  83. });
  84. } else if (config.isActType == "down") {
  85. $(config.objScr+" div").each(function(i){
  86. nPosFix = (config.nOrderNo==i)?0:config.nHeight;
  87. $(this).css({'position':'absolute','top':nPosFix+'px','left':'0'});
  88. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  89. $(this).fadeIn(config.nStartUp);
  90. }
  91. $(this).attr("divno",i);
  92. });
  93. } else if (config.isActType == "fade") {
  94. $(config.objScr+" div").each(function(i){
  95. if (config.nOrderNo==i) {
  96. nPosFix = 0;
  97. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  98. $(this).fadeIn(config.nStartUp);
  99. }
  100. } else {
  101. nPosFix = config.nWidth;
  102. }
  103. $(this).css({'position':'absolute','top':'0','left':nPosFix+'px'});
  104. $(this).attr("divno",i);
  105. });
  106. } else if (config.isActType == "page") {
  107. $(config.objScr+" div").each(function(i){
  108. nPosFix = (config.nOrderNo==i)?0:config.nHeight;
  109. $(this).css({'position':'absolute','top':nPosFix+'px','left':'0'});
  110. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  111. $(this).fadeIn(config.nStartUp);
  112. }
  113. $(this).attr("divno",i);
  114. });
  115. } else if (config.isActType == "none") {
  116. $(config.objScr+" div").each(function(i){
  117. if (config.nOrderNo==i) {
  118. nPosFix = 0;
  119. if (!(config.nOrderNo==i && config.isStartFade=="N")) {
  120. $(this).fadeIn(config.nStartUp);
  121. }
  122. } else {
  123. nPosFix = config.nWidth;
  124. }
  125. $(this).css({'position':'absolute','top':'0','left':nPosFix+'px'});
  126. $(this).attr("divno",i);
  127. });
  128. }
  129. /* 버튼 순번 설정 */
  130. $(config.objBtn+" "+config.isBtnType).each(function(i){ $(this).attr("btnno",i); $(this).css("cursor","hand") });
  131. /* 버튼 바인드 */
  132. jsBanBtnBind(config);
  133. /* 스크린 pause 바인드 */
  134. jsScrPauseBind(config);
  135. /* 베너 타이머 등록 및 액션 시작!!!! */
  136. if (config.isActType != "none" && config.isActType != "page") {
  137. config.objTimer = setTimeout( function(){jsBanTimer(config)}, config.nDelay);
  138. }
  139. };
  140. /* 배너 타이머 */
  141. function jsBanTimer(config) {
  142. /* 버튼 액션 순번의 초기화 */
  143. config.nOrderNoBtn = -1;
  144. jsBanAction(config);
  145. config.objTimer = setTimeout( function(){jsBanTimer(config)}, config.nDelay);
  146. };
  147. /* 배너 액션 처리 */
  148. function jsBanAction(config) {
  149. var nPageSel;
  150. var nSpeed = config.nSpeed;
  151. var nDivNoSel = config.nOrderNo;
  152. var nOrderNext = (config.nOrderNo+1)%(config.nCount);
  153. /* 'page' 액션일 경우 선택페이지 추출 */
  154. if (config.isActType == "page") {
  155. var nOrderMinus = config.nOrderNoBtn-config.nOrderNo;
  156. nPageSel = (nOrderMinus==1 || (nOrderMinus==(config.nCount-1)*-1)) ? 1 : 0;
  157. }
  158. if (config.nOrderNoBtn >= 0) {
  159. config.nOrderNo = config.nOrderNoBtn;
  160. nOrderNext = config.nOrderNoBtn;
  161. nSpeed = (config.isActType=="fade" || config.isActType=="page" || config.isActType=="none") ? config.nSpeedFade : 0;
  162. } else {
  163. config.nOrderNo = ((config.nCount-1)==config.nOrderNo) ? nOrderNext : config.nOrderNo+1;
  164. }
  165. var nDivNoNext = nOrderNext;
  166. var objSelObj = $(config.objScr+" div[divno='"+nDivNoSel+"']");
  167. var objNextObj = $(config.objScr+" div[divno='"+nDivNoNext+"']");
  168. /* 액션에 의한 버튼 선택 */
  169. if (config.isActType != "page") {
  170. jsBanBtnRO(config,nOrderNext);
  171. }
  172. /* 실제 스크린 레이어들의 동작 처리 */
  173. if (config.isActType == "left") {
  174. objNextObj.css('left',(config.nWidth)+'px');
  175. objSelObj.animate({'left':(-1*config.nWidth)+'px'},nSpeed);
  176. objNextObj.animate({'left':'0'},nSpeed);
  177. } else if (config.isActType == "right") {
  178. objNextObj.css('left',(-1*config.nWidth)+'px');
  179. objSelObj.animate({'left':config.nWidth+'px'},nSpeed);
  180. objNextObj.animate({'left':'0'},nSpeed);
  181. } else if (config.isActType == "up") {
  182. objNextObj.css('top',config.nHeight+'px');
  183. objSelObj.animate({'top':(-1*config.nHeight)+'px'},nSpeed);
  184. objNextObj.animate({'top':'0'},nSpeed);
  185. } else if (config.isActType == "down") {
  186. objNextObj.css('top',(-1*config.nHeight)+'px');
  187. objSelObj.animate({'top':config.nHeight+'px'},nSpeed);
  188. objNextObj.animate({'top':'0'},nSpeed);
  189. } else if (config.isActType == "fade") {
  190. objSelObj.css({'left':config.nWidth+'px','display':'none'});
  191. objNextObj.css('left','0');
  192. objNextObj.fadeIn(nSpeed);
  193. } else if (config.isActType == "page") {
  194. if (nPageSel == 0) {
  195. objNextObj.css({'top':'0','left':config.nWidth+'px'});
  196. objSelObj.animate({'left':(-1*config.nWidth)+'px'},nSpeed);
  197. objNextObj.animate({'left':'0'},nSpeed);
  198. } else if (nPageSel == 1) {
  199. objNextObj.css({'top':'0','left':(-1*config.nWidth)+'px'});
  200. objSelObj.animate({'left':config.nWidth+'px'},nSpeed);
  201. objNextObj.animate({'left':'0'},nSpeed);
  202. }
  203. } else if (config.isActType == "none") {
  204. objSelObj.css({'left':config.nWidth+'px','display':'none'});
  205. objNextObj.css('left','0');
  206. objNextObj.fadeIn(nSpeed);
  207. }
  208. }
  209. /* 스크린 pause 바인드 */
  210. function jsScrPauseBind(config) {
  211. /* 스크린에 대한 처리 */
  212. $(config.objScr).mouseover(function(){
  213. clearTimeout(config.objTimer);
  214. });
  215. $(config.objScr).mouseout(function(){
  216. if (config.isActType != "none" && config.isActType != "page") {
  217. config.objTimer = setTimeout( function(){jsBanTimer(config)}, config.nDelay);
  218. }
  219. });
  220. }
  221. /* 버튼 바인드 */
  222. function jsBanBtnBind(config) {
  223. /* 초기 버튼 설정 */
  224. if (config.isActType != "page") {
  225. jsBanBtnRO(config,config.nOrderNo);
  226. }
  227. /* 버튼에 대해 마우스 오버일 경우 처리 */
  228. if (config.isBtnAct=="mouseover") {
  229. /* 버튼에 대한 처리 */
  230. $(config.objBtn+" "+config.isBtnType).mouseover(function(){
  231. var nImgNo = $(this).attr("btnno");
  232. if (config.isActType != "none" && config.isActType != "page") {
  233. clearTimeout(config.objTimer);
  234. }
  235. if (config.isActType == "page") {
  236. if (nImgNo == 0) {
  237. config.nOrderNoBtn = ((config.nOrderNo-1)<0) ? config.nCount-1 : config.nOrderNo-1;
  238. } if (nImgNo == 1) {
  239. config.nOrderNoBtn = ((config.nOrderNo+1)==config.nCount) ? (config.nOrderNo+1)%config.nCount : config.nOrderNo+1;
  240. }
  241. jsBanBtnRO(config,nImgNo);
  242. } else {
  243. config.nOrderNoBtn = parseInt(nImgNo);
  244. }
  245. jsBanAction(config);
  246. });
  247. $(config.objBtn+" "+config.isBtnType).mouseout(function(){
  248. if (config.isActType != "none" && config.isActType != "page") {
  249. config.objTimer = setTimeout( function(){jsBanTimer(config)}, config.nDelay);
  250. }
  251. });
  252. /* 버튼에 대해 클릭일 경우 처리 */
  253. } else if (config.isBtnAct=="click") {
  254. $(config.objBtn+" "+config.isBtnType).click(function(){
  255. var nImgNo = $(this).attr("btnno");
  256. if (config.isActType != "none" && config.isActType != "page") {
  257. clearTimeout(config.objTimer);
  258. }
  259. if (config.isActType == "page") {
  260. if (nImgNo == 0) {
  261. config.nOrderNoBtn = ((config.nOrderNo-1)<0) ? config.nCount-1 : config.nOrderNo-1;
  262. } if (nImgNo == 1) {
  263. config.nOrderNoBtn = ((config.nOrderNo+1)==config.nCount) ? (config.nOrderNo+1)%config.nCount : config.nOrderNo+1;
  264. }
  265. jsBanBtnRO(config,nImgNo);
  266. } else {
  267. config.nOrderNoBtn = parseInt(nImgNo);
  268. }
  269. jsBanAction(config);
  270. if (config.isActType != "none" && config.isActType != "page") {
  271. config.objTimer = setTimeout( function(){jsBanTimer(config)}, config.nDelay);
  272. }
  273. });
  274. }
  275. };
  276. /* 버튼 롤오버 처리 */
  277. function jsBanBtnRO (config,nSel) {
  278. if (config.isBtnType=="img") {
  279. $(config.objBtn+" img").each(function(i){
  280. if (nSel==i) {
  281. $(this).attr("src",$(this).attr("oversrc"));
  282. } else {
  283. $(this).attr("src",$(this).attr("outsrc"));
  284. }
  285. });
  286. } else if (config.isBtnType=="li") {
  287. $(config.objBtn+" li").each(function(i){
  288. if (nSel==i) {
  289. $(this).attr("class",$(this).attr("overclass"));
  290. } else {
  291. $(this).attr("class",$(this).attr("outclass"));
  292. }
  293. });
  294. }
  295. }
  296. /* IE 체크 */
  297. function jsBrowserCheck() {
  298. appname = navigator.appName;
  299. useragent = navigator.userAgent;
  300. if(appname == "Microsoft Internet Explorer") appname = "IE";
  301. IE55 = (useragent.indexOf('MSIE 5.5')>0); //5.5 버전
  302. IE6 = (useragent.indexOf('MSIE 6')>0); //6.0 버전
  303. IE7 = (useragent.indexOf('MSIE 7')>0); //7.0 버전
  304. IE8 = (useragent.indexOf('MSIE 8')>0); //8.0 버전
  305. if(appname=="IE" && IE55 || IE6 || IE7 || IE8){
  306. return true
  307. }else{
  308. return false;
  309. }
  310. }
  311. });