缩略图图片【原创】jQuery插件之图片轮播
来源:互联网 发布:ubuntu torch lua 编辑:程序博客网 时间:2024/06/05 11:29
文章结束给大家来个程序员笑话:[M]
周末的时候写了一个图片轮播的jQuery件插,明天应品产的求需,又改进了些,所以写了两个版本slideshow.js和slideshow_v2.js;
代码中供提两个接口:
1. jQuery接口
2. CMD接口(相当于返回一个构造器),对外露暴包装后的public api(上面能功中说到)
那么现实的能功:
1,基本的的轮播能功:向前(prev),向后(next),第一张(first),最后一张(last),指定图片索引(jumpto),向前(后)主动放播(play),停止放播(stop)
2. 关于图片的请求做了一些处置,个一每slideshow的巨细都是通过参数自定义成生的,那么对于量大图片数据,处置的式方是这样的:
根据slideshow的际实度宽,算出并展示视可区域缩略图的个数,当点击至最后一个已载下缩略图时,才会载下另外一批缩略图,并成生响应的dom。
一样的,对于预览图(中图),也是点击缩略图后才会行进请求。
3. 在视觉上做的是缩略图动滚,使选中的图片剧中表现。
效果图:
面上分析的是第一个版本slideshow.js,在slideshow_v2.js上又有少量的动改,主要是在事件持支上:
1. 给缩略图添加mouseenter事件,增加用户应用本成(品产如是说)
2. 当鼠标放在阁下箭头时,开始主动放播,移开停止主动放播,一样是为了增加用户用适本成(品产如是说)
针对slideshow.js和slideshow_v2.js,给出了两个demo分别是simple和complex。
以下是slideshow.js的源代码:
1 /** 2 * @description 图片轮播jQuery件插 3 * @file slideshow.js 4 * @dep jquery 5 * @author lovesueee@me.com 6 * @version 2012-12-06 7 */ 8 9 define(['./slideshow.css'],function (require, exports, module) { 10 11 var $ = require('./jquery.js'); 12 13 // Slide认默配置 14 var SlideConfig = { 15 16 start : 0, // 肇端图片的索引,从0开始 17 18 interval : 0, // 主动轮播的时间间隔,如果为0,示表不主动轮播,单位为秒 19 20 repeat : true, // 否是循环重复轮播 21 22 width : 302, // 件组度宽,如果为0,示表由自度宽 23 24 viewHeight : 200, // view视图高度 25 26 navHeight : 53, // navgation导航条高度 27 28 arrWidth : 8, // 导航箭头的度宽 29 30 arrHeight : 20, // 导航箭头的高度 31 32 33 thumbWidth : 54, // 缩略图的度宽 34 35 data : { // 图片数据 36 37 sImgs : [], // 小图 38 mImgs : [], // 中图 39 bImgs : [] // 大图 40 } 41 42 }; 43 44 var SlideShow = function (options) { 45 46 var $el; 47 48 $el = options.$el; 49 50 if ($el.length === 0) return; 51 52 if ($el.length > 1) { 53 54 $el.each(function () { 55 $(this).slideShow(options); 56 }); 57 58 return; 59 } 60 61 this.$el = $el; 62 63 this.config = $.extend({}, SlideConfig, options); 64 65 this.init(); 66 67 }; 68 69 SlideShow.prototype = { 70 71 constructor : SlideShow, 72 73 init : function () { 74 75 var $el = this.$el; 76 77 var config = this.config; 78 79 var data = config.data 80 81 var number = Math.min(data.sImgs.length, data.mImgs.length, data.bImgs.length); 82 83 if (number === 0) throw new Error('number of images is zero'); 84 85 this.number = number; 86 87 var current = config.start % number; 88 89 this.current = -1; 90 91 this.length = 0; 92 93 var width = config.width; 94 95 width !== 0 && $el.css('width', width); 96 97 $el.addClass('gj-slide-show').css('visibility', 'hidden'); 98 99 this.createDom();100 101 this.jumpto(current);102 103 config.interval > 0 && this.play();104 105 $el.css('visibility', 'visible');106 107 return this;108 109 },110 111 createDom : function () {112 113 var $el = this.$el;114 115 var config = this.config;116 117 var $view = $('<div></div>');118 119 var $a = $('<a></a>');120 121 var $img = $('<img>');122 123 124 $a.attr({125 title : '查看大图',126 href : '#',127 target : '_blank'128 }).append($img);129 130 $view.append($a)131 .addClass('gj-slide-view')132 .css('height', config.viewHeight);133 134 135 136 var navHeight = config.navHeight;137 138 var arrWidth = config.arrWidth;139 140 var arrHeight = config.arrHeight;141 142 var top = Math.round((config.navHeight - 14) / 2 - arrHeight / 2);143 144 var $nav = $('<div></div>');145 146 var $larr = $('<div></div>');147 148 var $rarr = $('<div></div>');149 150 var $thumbs = $('<div></div>');151 152 var $ul = $('<ul></ul>');153 154 var $la = $('<a></a>');155 156 var $ra = $('<a></a>');157 158 $la.attr('href', '#')159 .css({160 height : arrHeight,161 width : arrWidth,162 top : top163 });164 165 $larr.append($la)166 .addClass('gj-slide-forward gj-slide-arrow')167 .css('width', arrWidth);168 169 $ra.attr('href', '#')170 .css({171 height : arrHeight,172 width : arrWidth,173 top : top174 });175 176 $rarr.append($ra)177 .addClass('gj-slide-backward gj-slide-arrow')178 .css('width', arrWidth);179 180 $ul.addClass('clear')181 .css('width', (config.thumbWidth + 17) * this.number);182 183 $thumbs.append($ul)184 .addClass('gj-slide-thumbs')185 .css({186 width : config.width - 2 * arrWidth - 9,187 height : navHeight188 });189 190 $nav.append($larr)191 .append($thumbs)192 .append($rarr)193 .addClass('gj-slide-nav clear')194 .css('height', navHeight);195 196 $el.append($view).append($nav);197 198 199 var me = this;200 201 $la.on('click', function () {202 203 me.prev();204 205 return false;206 });207 208 $ra.on('click', function () {209 210 me.next();211 212 return false;213 });214 215 this.$ul = $ul;216 this.$img = $img;217 this.$a = $a;218 219 // 视可缩略图个数220 var visnum = this.visnum = Math.round($thumbs.width() / (config.thumbWidth + 16));221 // 缩略图挪动的步数222 this.steps = 0;223 // 最大挪动步数224 var maxsteps = this.maxsteps = this.number - visnum + 1;225 maxsteps < 0 && (this.maxsteps = 0);226 // 间中缩略图索引227 this.midIndex = Math.floor(visnum / 2);228 229 return this;230 },231 232 loadThumbs : function (num) {233 234 var sIndex, length;235 236 sIndex = length = this.length;237 238 var number = this.number;239 240 var config = this.config;241 242 (!num || num < this.visnum) && (num = this.visnum);243 244 var rest = number - length;245 246 num > rest && (num = rest);247 248 if (num === 0) return this;;249 250 var $ul = this.$ul;251 252 var data = config.data;253 254 var lIndex = sIndex + num;255 256 var me = this;257 258 for (var i = sIndex; i < lIndex; i++) {259 260 var $li = $('<li></li>');261 262 var $a = $('<a></a>');263 264 var $img = $('<img>');265 266 $img.attr('src', data.sImgs[i])267 .css({268 width : config.thumbWidth,269 height : config.navHeight - 14270 });271 272 $a.attr('href', '#')273 .append($img);274 275 $li.addClass('gj-slide-thumb')276 .attr('gj-side-index', i)277 .append($a);278 279 $ul.append($li);280 281 $li.on('click', function () {282 283 me.jumpto($(this).attr('gj-side-index'));284 285 return false;286 287 });288 289 this[i] = $li;290 }291 292 this.length = length + num;293 294 return this;295 296 },297 298 play : function (interval) {299 300 var config = this.config;301 302 if (interval) {303 304 this.config.interval = interval;305 306 } else {307 308 interval = config.interval;309 }310 311 if (!interval) return this;312 313 var me = this;314 315 this.interval && this.stop();316 317 this.interval = window.setInterval(function () {318 319 me.next();320 321 }, interval * 1000);322 323 return this;324 },325 326 stop : function () {327 328 if (this.interval) {329 window.clearInterval(this.interval);330 delete this.interval;331 }332 333 return this;334 },335 336 prev : function () {337 338 this.jumpto(this.current - 1);339 340 return this;341 342 },343 344 next : function () {345 346 this.jumpto(this.current + 1);347 348 return this;349 },350 351 first : function () {352 353 this.jumpto(0);354 355 return this;356 },357 358 last : function () {359 360 this.jumpto(this.length - 1);361 362 return this;363 },364 365 jumpto : function (index) {366 367 var length = this.length;368 369 var number = this.number;370 371 var config = this.config;372 373 var data = config. data;374 375 // 否是循环重复轮播376 if (!config.repeat) {377 378 index < 0 && (index = 0);379 380 index >= number && (index = number -1);381 382 (index === 0 || index === number - 1) && this.interval && this.stop();383 384 } else {385 386 index = index % number;387 388 index < 0 && (index += number);389 390 }391 392 var num = index - length + 1;393 394 num > 0 && this.loadThumbs(num);395 396 var lastIndex = this.current;397 398 if (lastIndex === index) return this;399 400 this.current = index;401 402 var maxsteps = this.maxsteps;403 var steps = index - this.midIndex + this.steps;404 var step = 0;405 406 if (steps < 0) {407 step = steps;408 steps = 0;409 }410 411 if (steps > maxsteps) {412 step = steps - maxsteps;413 steps = maxsteps;414 }415 416 if (steps !== this.steps) {417 418 this.$ul.animate({419 left : -steps * (config.thumbWidth + 16)420 });421 422 this.midIndex = index - step;423 steps > this.steps && (index + 1) % this.visnum === 0 && this.loadThumbs();424 this.steps = steps;425 }426 427 var lastEl = this[lastIndex];428 429 lastEl && lastEl.removeClass('select');430 431 this[index].addClass('select');432 433 this.$img.attr('src', data.mImgs[index]);434 this.$a.attr('href', data.bImgs[index]);435 436 return this;437 }438 };439 440 // jQuery接口441 $.fn.slideShow = function (options) {442 443 !options && (options = {});444 445 options.$el = this;446 447 new SlideShow(options);448 449 return this;450 };451 452 // CMD接口453 return function (options) {454 455 var el, $el;456 457 if (!options || !(el = options.el)) throw new Error('options.el is needed');458 459 $el = (el instanceof $) ? el : $(el);460 461 // 只对第一个元素行进处置462 options.$el = $el.length > 1 ? $($el[0]) : $el;463 464 var slide = new SlideShow(options);465 466 // 公开API467 return {468 469 prev : slide.prev,470 471 next : slide.next,472 473 first : slide.first,474 475 last : slide.last,476 477 jumpto : slide.jumpto,478 479 play : slide.play,480 481 stop : slide.stop482 483 };484 };485 });
over!!
欢迎指正错误~~
文章结束给大家分享下程序员的一些笑话语录: 一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。
- 缩略图图片【原创】jQuery插件之图片轮播
- jQuery 图片轮播插件
- jQuery 图片轮播插件
- JQuery图片轮播插件
- [jquery]轮播图片插件
- JQuery插件之图片轮播插件–slideBox
- 原创jQuery插件之图片自适应
- 图片轮播插件jquery.smallslider.js
- jQuery图片轮播(焦点图)插件
- jQuery的图片轮播插件responsiveslides
- jQuery SmallSlider 图片轮播插件
- Jquery 图片轮播的插件
- 图片轮播插件jquery.smallslider.js
- jquery 图片轮播插件unslider
- 图片轮播插件
- 图片轮播插件
- jquery 图片轮播
- jquery图片轮播
- OpenCv的连通域操作
- poj2186强连通分量
- 查找算法之三分查找
- OpenGL入门学习[二]
- jqGrid 各种参数 详解
- 缩略图图片【原创】jQuery插件之图片轮播
- OpenGL入门学习[三]
- OpenGL入门学习[四]
- 几种常见的RAID形式
- OpenGL入门学习[五]
- 谈谈你对信任,可信,信誉的理解
- 使用GDAL打开和保存常见格式图像(代码)
- 点滴积累【JS】
- web页面中按钮执行处理时间过长,添加div等待层