/*! * 轮播图组件js * author: zhuyichao * 2015.10 * v 1.1.4 * 只适用于图片和切换按钮在一个dom容器内的; */ /* * 轮播图组件 */ $.fn.xslider = function (options) { var settings = { // 效果 有scrollx|scrolly|fade affect: 'fade', // 动画速度 speed: 1200, // 时间间隔 space: 2000, // 自动滚动 auto: true, // 触发事件 注意用mouseover代替hover trigger: 'mouseover', // 内容容器id或class conbox: '.conbox', // 内容标签 默认为 ctag: '.ctag', //说明文字直接父容器(固定区域,不随图片变化时使用,也可以直接写在c-tag中和图片一起变化,看具体需求) titlebox: '.title-con', // 切换触发器id或class switcher: '.switcher', // 切换器标签 默认为a stag: '.stag', // 当前切换器样式名称 current: 'cur', // 是否随机指定默认幻灯图片 rand: false, // 容器宽度 boxwidth: '100%', boxheight: '100%', pre_b: '#left-btn', next_b: '#right-btn' }; // settings = $.extend({}, settings, options); $.extend(settings, options); var $this = $(this), index = 0, last_index = 3, $conbox = $this.find(settings.conbox), $contents = $conbox.find(settings.ctag), $switcher = $this.find(settings.switcher), $stag = $switcher.find(settings.stag), $titlecon = $this.find(settings.titlebox), timer; $this.width(settings.boxwidth); $contents.width($this.width()); $this.width($this.width()); if (settings.affect == 'scrollx') { $contents.eq(0).clone().css('float', 'left').appendto($conbox).height(settings.boxheight);; $conbox.width(($contents.length + 1) * $contents.width()); $conbox.css('position', 'relative'); $contents.css('float', 'left'); } if (settings.affect == 'scrolly') { $contents.eq(0).clone().appendto($conbox); $conbox.height(($contents.length + 1) * $contents.height()); $conbox.css('position', 'relative'); $contents.css({ display: 'block' }); } var $newcontents = $conbox.find(settings.ctag); if (settings.boxwidth == "100%") { $(window).on('resize', function (event) { $this.width(settings.boxwidth); $newcontents.width($this.width()); $conbox.width($newcontents.length * $newcontents.width()); }); } else { $this.height(settings.boxheight); $contents.height(settings.boxheight); $newcontents.find('img').height(settings.boxheight - 0 - 31); } // 渐变模式预设值 if (settings.affect == 'fade') { $switcher.css({ 'position': 'absolute', 'z-index': 10 }); $.each($contents, function (k, v) { if (k === 0) { $(this).css({ 'position': 'absolute', 'z-index': 9 }) } else { $(this).css({ 'position': 'absolute', 'z-index': 1, 'opacity': 0 }); } }); } $this.css('overflow', 'hidden'); // 滚动轮播图模式 function slide(once) { if (index > $contents.length) { $conbox.css({ 'left': 0, 'top': 0 }) index = 1; } if (index == $contents.length) { $stag.removeclass(settings.current).eq(0).addclass(settings.current); if (settings.affect == 'fade') { index = 0; } } else { $stag.removeclass(settings.current).eq(index).addclass(settings.current); } var title = $contents.eq(index).find('img').eq(0).attr('alt'); $titlecon.html(title); switch (settings.affect) { // 横向滚动 case 'scrollx': if (last_index == 0 && index == ($contents.length - 1)) { $conbox.finish().css({ 'left': $contents.length * -$contents.width() }); } if (index == $contents.length) { $conbox.finish().animate({ left: -$contents.width() * index }, settings.speed, function () { $conbox.css({ 'left': 0, 'top': 0 }); }); } else { $conbox.finish().animate({ left: -$contents.width() * index }, settings.speed); } break; // 竖着滚动 case 'scrolly': if (last_index == 0 && index == ($contents.length - 1)) { $conbox.css({ 'top': $contents.length * -$contents.height() }); } if (index == $contents.length) { $conbox.finish().animate({ top: -$contents.height() * index }, settings.speed, function () { $conbox.css({ 'left': 0, 'top': 0 }); }); } else { $conbox.finish().animate({ top: -$contents.height() * index }, settings.speed); } break; // 渐变模式 case 'fade': $contents.eq(last_index).finish() .animate({ 'opacity': 0 }, settings.speed / 2) .css('z-index', 1) .end().eq(index).css('z-index', 9).finish() .animate({ 'opacity': 1 }, settings.speed / 2); break; case 'none': $contents.hide().eq(index).show(); break; } last_index = index; if (last_index == $contents.length) { last_index = 0; } index++; // 随机变幻; if (settings.rand) { index = math.floor(math.random() * $contents.length); } //判断是否只执行一次。 if (once) { //index = last_index; } else { cleartimeout(timer); timer = settimeout(slide, settings.space); } }; // 如果设置自动,开始动作 if (settings.auto) { timer = settimeout(slide, settings.space); } // 标签事件触发时立即显示当前图片 $stag.on(settings.trigger, function () { _pause(); index = $(this).index(); if (last_index == $contents.length - 1 && index == 0) { index = $contents.length; } slide(true); }); // 悬浮时暂停,离开时继续 $this.mouseenter(_pause); $this.mouseleave(_continue); // 暂停动画动作 function _pause() { if (timer) { cleartimeout(timer); } }; // 继续动作 function _continue() { if (timer) { cleartimeout(timer); } if (settings.auto) { timer = settimeout(slide, settings.space / 2); } }; $(settings.next_b).click(function () { $conbox.finish(); cleartimeout(timer); index = last_index + 1; slide(); }); $(settings.pre_b).click(function () { $conbox.finish(); cleartimeout(timer); index = last_index - 1; if (index == -1) { index = $contents.length - 1; } slide(); }); slide(true); //初始化轮播 }