1/** 2 * @classDescription è¶ çº§Marqueeï¼å¯åå¾ç导èªï¼å¾çè½®æ¢ 3 * @author Aken Li(www.kxbd.com) 4 * @date 2009-07-27 5 * @dependence jQuery 1.3.2 6 * @DOM 7 * <div id="marquee"> 8 * <ul> 9 * <li></li> 10 * <li></li> 11 * </ul> 12 * </div> 13 * @CSS 14 * #marquee {width:200px;height:50px;overflow:hidden;} 15 * @Usage 16 * $('#marquee').kxbdSuperMarquee(options); 17 * @options 18 * distance:200,//䏿¬¡æ»å¨çè·ç¦» 19 * duration:20,//ç¼å¨ææï¼åæ¬¡ç§»å¨æ¶é´ï¼è¶å°é度è¶å¿«ï¼ä¸º0æ¶æ ç¼å¨ææ 20 * time:5,//åé¡¿æ¶é´ï¼åä½ä¸ºç§ 21 * direction: 'left',//æ»å¨æ¹åï¼'left','right','up','down' 22 * scrollAmount:1,//æ¥é¿ 23 * scrollDelay:20//æ¶é¿ï¼åä½ä¸ºæ¯«ç§ 24 * isEqual:true,//æææ»å¨çå ç´ é¿å®½æ¯å¦ç¸ç,true,false 25 * loop: 0,//å¾ªç¯æ»å¨æ¬¡æ°ï¼0æ¶æ é 26 * btnGo:{left:'#goL',right:'#goR'},//æ§å¶æ¹åçæé®IDï¼æåä¸ªå±æ§left,right,up,downåå«å¯¹åºå个æ¹å 27 * eventGo:'click',//é¼ æ äºä»¶ 28 * controlBtn:{left:'#goL',right:'#goR'},//æ§å¶å éæ»å¨çæé®IDï¼æåä¸ªå±æ§left,right,up,downåå«å¯¹åºå个æ¹å 29 * newAmount:4,//å éæ»å¨çæ¥é¿ 30 * eventA:'mouseenter',//é¼ æ äºä»¶ï¼å é 31 * eventB:'mouseleave',//é¼ æ äºä»¶ï¼åé 32 * navId:'#marqueeNav', //导èªå®¹å¨IDï¼å¯¼èªDOM:<ul><li>1</li><li>2</li><ul>,导èªCSS:.navOn 33 * eventNav:'click' //导èªäºä»¶ 34 */ 35(function($){ 36 37 $.fn.kxbdSuperMarquee = function(options){ 38 var opts = $.extend({},$.fn.kxbdSuperMarquee.defaults, options); 39 40 return this.each(function(){ 41 var $marquee = $(this);//æ»å¨å ç´ å®¹å¨ 42 var _scrollObj = $marquee.get(0);//æ»å¨å ç´ å®¹å¨DOM 43 var scrollW = $marquee.width();//æ»å¨å ç´ å®¹å¨ç宽度 44 var scrollH = $marquee.height();//æ»å¨å ç´ å®¹å¨çé«åº¦ 45 var $element = $marquee.children(); //æ»å¨å ç´ 46 var $kids = $element.children();//æ»å¨åå ç´ 47 var scrollSize=0;//æ»å¨å ç´ å°ºå¯¸ 48 var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//æ»å¨ç±»åï¼1å·¦å³ï¼0ä¸ä¸ 49 var scrollId, rollId, isMove, marqueeId; 50 var t,b,c,d,e; //æ»å¨å¨ç»çåæ°,t:å½åæ¶é´ï¼b:å¼å§çä½ç½®ï¼c:æ¹åçä½ç½®ï¼d:æç»çæ¶é´ï¼e:ç»æçä½ç½® 51 var _size, _len; //åå ç´ ç尺寸ä¸ä¸ªæ° 52 var $nav,$navBtns; 53 var arrPos = []; 54 var numView = 0; //å½åæçåå ç´ 55 var numRoll=0; //è½®æ¢çæ¬¡æ° 56 var numMoved = 0;//å·²ç»ç§»å¨çè·ç¦» 57 58 //鲿¢æ»å¨åå ç´ æ¯æ»å¨å ç´ å®½èåä¸å°å®é æ»å¨åå ç´ å®½åº¦ 59 $element.css(_type?'width':'height',10000); 60 //è·åæ»å¨å ç´ ç尺寸 61 var navHtml = '<ul>'; 62 if (opts.isEqual) { 63 _size = $kids[_type?'outerWidth':'outerHeight'](); 64 _len = $kids.length; 65 scrollSize = _size * _len; 66 for(var i=0;i<_len;i++){ 67 arrPos.push(i*_size); 68 navHtml += '<li></li>'; 69 } 70 }else{ 71 $kids.each(function(i){ 72 arrPos.push(scrollSize); 73 scrollSize += $(this)[_type?'outerWidth':'outerHeight'](); 74 navHtml += '<li></li>'; 75 }); 76 } 77 navHtml += '</ul>'; 78 79 //æ»å¨å ç´ æ»å°ºå¯¸å°äºå®¹å¨å°ºå¯¸ï¼ä¸æ»å¨ 80 if (scrollSize<(_type?scrollW:scrollH)) return; 81 //å éæ»å¨åå ç´ å°å ¶æå ¥å°æ»å¨å ç´ åï¼å¹¶è®¾å®æ»å¨å ç´ å®½åº¦ 82 $element.append($kids.clone()).css(_type?'width':'height',scrollSize*2); 83 84 //è½®æ¢å¯¼èª 85 if (opts.navId) { 86 $nav = $(opts.navId).append(navHtml).hover( stop, start ); 87 $navBtns = $('li', $nav); 88 $navBtns.each(function(i){ 89 $(this).bind(opts.eventNav,function(){ 90 if(isMove) return; 91 if(numView==i) return; 92 rollFunc(arrPos[i]); 93 $navBtns.eq(numView).removeClass('navOn'); 94 numView = i; 95 $(this).addClass('navOn'); 96 }); 97 }); 98 $navBtns.eq(numView).addClass('navOn'); 99 } 100 101 //设å®åå§ä½ç½® 102 if (opts.direction == 'right' || opts.direction == 'down') { 103 _scrollObj[_type?'scrollLeft':'scrollTop'] = scrollSize; 104 }else{ 105 _scrollObj[_type?'scrollLeft':'scrollTop'] = 0; 106 } 107 108 if(opts.isMarquee){ 109 //æ»å¨å¼å§ 110 //marqueeId = setInterval(scrollFunc, opts.scrollDelay); 111 marqueeId = setTimeout(scrollFunc, opts.scrollDelay); 112 //é¼ æ åè¿åæ¢æ»å¨ 113 $marquee.hover( 114 function(){ 115 clearInterval(marqueeId); 116 }, 117 function(){ 118 //marqueeId = setInterval(scrollFunc, opts.scrollDelay); 119 clearInterval(marqueeId); 120 marqueeId = setTimeout(scrollFunc, opts.scrollDelay); 121 } 122 ); 123 124 //æ§å¶å éè¿å¨ 125 if(opts.controlBtn){ 126 $.each(opts.controlBtn, function(i,val){ 127 $(val).bind(opts.eventA,function(){ 128 opts.direction = i; 129 opts.oldAmount = opts.scrollAmount; 130 opts.scrollAmount = opts.newAmount; 131 }).bind(opts.eventB,function(){ 132 opts.scrollAmount = opts.oldAmount; 133 });
134 }); 135 } 136 }else{ 137 if(opts.isAuto){ 138 //è½®æ¢å¼å§ 139 start(); 140 141 //é¼ æ åè¿åæ¢è½®æ¢ 142 $marquee.hover( stop, start ); 143 } 144 145 //æ§å¶ååèµ° 146 if(opts.btnGo){ 147 $.each(opts.btnGo, function(i,val){ 148 $(val).bind(opts.eventGo,function(){ 149 if(isMove == true) return; 150 opts.direction = i; 151 rollFunc(); 152 if (opts.isAuto) { 153 stop(); 154 start(); 155 } 156 }); 157 }); 158 } 159 } 160 161 function scrollFunc(){ 162 var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop'; 163 164 if(opts.isMarquee){ 165 if (opts.loop > 0) { 166 numMoved+=opts.scrollAmount; 167 if(numMoved>scrollSize*opts.loop){ 168 _scrollObj[_dir] = 0; 169 return clearInterval(marqueeId); 170 } 171 } 172 var newPos = _scrollObj[_dir]+(opts.direction == 'left' || opts.direction == 'up'?1:-1)*opts.scrollAmount; 173 }else{ 174 if(opts.duration){ 175 if(t++<d){ 176 isMove = true; 177 var newPos = Math.ceil(easeOutQuad(t,b,c,d)); 178 if(t==d){ 179 newPos = e; 180 } 181 }else{ 182 newPos = e; 183 clearInterval(scrollId); 184 isMove = false; 185 return; 186 } 187 }else{ 188 var newPos = e; 189 clearInterval(scrollId); 190 } 191 } 192 193 if(opts.direction == 'left' || opts.direction == 'up'){ 194 if(newPos>=scrollSize){ 195 newPos-=scrollSize; 196 } 197 }else{ 198 if(newPos<=0){ 199 newPos+=scrollSize; 200 } 201 } 202 _scrollObj[_dir] = newPos; 203 204 if(opts.isMarquee){ 205 marqueeId = setTimeout(scrollFunc, opts.scrollDelay); 206 }else if(t<d){ 207 if(scrollId) clearTimeout(scrollId); 208 scrollId = setTimeout(scrollFunc, opts.scrollDelay); 209 }else{ 210 isMove = false; 211 } 212 213 }; 214 215 function rollFunc(pPos){ 216 isMove = true; 217 var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop'; 218 var _neg = opts.direction == 'left' || opts.direction == 'up'?1:-1; 219 220 numRoll = numRoll +_neg; 221 //å¾å°å½åæçå ç´ åºå·å¹¶æ¹å导èªCSS 222 if(pPos == undefined&&opts.navId){ 223 $navBtns.eq(numView).removeClass('navOn'); 224 numView +=_neg; 225 if(numView>=_len){ 226 numView = 0; 227 }else if(numView<0){ 228 numView = _len-1; 229 } 230 $navBtns.eq(numView).addClass('navOn'); 231 numRoll = numView; 232 } 233 234 var _temp = numRoll<0?scrollSize:0; 235 t=0; 236 b=_scrollObj[_dir]; 237 //c=(pPos != undefined)?pPos:_neg*opts.distance; 238 e=(pPos != undefined)?pPos:_temp+(opts.distance*numRoll)%scrollSize; 239 if(_neg==1){ 240 if(e>b){ 241 c = e-b; 242 }else{ 243 c = e+scrollSize -b; 244 } 245 }else{ 246 if(e>b){ 247 c =e-scrollSize-b; 248 }else{ 249 c = e-b; 250 } 251 } 252 d=opts.duration; 253 254 //scrollId = setInterval(scrollFunc, opts.scrollDelay); 255 if(scrollId) clearTimeout(scrollId); 256 scrollId = setTimeout(scrollFunc, opts.scrollDelay); 257 } 258 259 function start(){ 260 rollId = setInterval(function(){ 261 rollFunc(); 262 }, opts.time*1000); 263 } 264 function stop(){ 265 clearInterval(rollId); 266 } 267 268 function easeOutQuad(t,b,c,d){ 269 return -c *(t/=d)*(t-2) + b; 270 } 271 272 function easeOutQuint(t,b,c,d){ 273 return c*((t=t/d-1)*t*t*t*t + 1) + b; 274 } 275 276 }); 277 }; 278 $.fn.kxbdSuperMarquee.defaults = { 279 isMarquee:false,//æ¯å¦ä¸ºMarquee 280 isEqual:true,//æææ»å¨çå ç´ é¿å®½æ¯å¦ç¸ç,true,false 281 loop: 0,//å¾ªç¯æ»å¨æ¬¡æ°ï¼0æ¶æ é 282 newAmount:3,//å éæ»å¨çæ¥é¿ 283 eventA:'mousedown',//é¼ æ äºä»¶ï¼å é 284 eventB:'mouseup',//é¼ æ äºä»¶ï¼åé 285 isAuto:true,//æ¯å¦èªå¨è½®æ¢ 286 time:5,//åé¡¿æ¶é´ï¼åä½ä¸ºç§ 287 duration:50,//ç¼å¨ææï¼åæ¬¡ç§»å¨æ¶é´ï¼è¶å°é度è¶å¿«ï¼ä¸º0æ¶æ ç¼å¨ææ 288 eventGo:'click', //é¼ æ äºä»¶ï¼ååååèµ° 289 direction: 'left',//æ»å¨æ¹åï¼'left','right','up','down' 290 scrollAmount:1,//æ¥é¿ 291 scrollDelay:10,//æ¶é¿ 292 eventNav:'click'//导èªäºä»¶ 293 }; 294 295 $.fn.kxbdSuperMarquee.setDefaults = function(settings) { 296 $.extend( $.fn.kxbdSuperMarquee.defaults, settings ); 297 }; 298 299})(jQuery); 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.