www.gusucode.com > 魅族手机官网幻灯片导航菜单源码程序 > 魅族手机官网幻灯片导航菜单/js/slider.js
function Slider() { this.oWrapper = $('#wrapper'); this.oParent = null; this.oSlider = null; this.slider_item = null; this.btn_item = null; this.iNow = 0; this.slider_w = 0; this.slider_h = 0; this.timer = null; this.get_l = null; this.settings = { slider_num: 4, w: 1200, h: 500 }; }; Slider.prototype = { nextSlider: function (dis) { var self = this; if (dis > this.settings.w * 0.4) { if (this.iNow === this.slider_item.length - 1) { for (var i = 1; i < this.slider_item.length - 1; i++) { $(this.slider_item[i]).css({left: this.slider_w}); this.slider_item.eq(this.iNow).animate({left: -this.slider_w}); // 这里因为move时已经移动了一些距离,所以直接left: 0 this.slider_item.eq(0).animate({left: 0}); } this.iNow = 0; } else { this.slider_item.eq(this.iNow).animate({left: -this.slider_w}); this.slider_item.eq(this.iNow + 1).animate({left: 0}); this.iNow ++; } // 圆点及主题颜色的变化 this.setDot(this.iNow); if (this.iNow === 0) { this.themeClass(true); } else { this.themeClass(false); } } else { this.slider_item.eq(this.iNow).animate({left: 0}); if (this.iNow === this.slider_item.length - 1) { this.slider_item.eq(0).animate({left: this.slider_w}); } else { this.slider_item.eq(this.iNow + 1).animate({left: this.slider_w}); } } }, prevSlider: function (dis) { var self = this; if (Math.abs(dis) > this.settings.w * 0.4) { // 拖动超过一定距离时 this.slider_item.eq(this.iNow).animate({left: this.slider_w}); this.slider_item.eq(this.iNow - 1).animate({left: 0}); if (Math.abs(this.iNow) === this.slider_item.length - 1) { this.iNow = 0; } else { this.iNow --; } // 圆点及主题颜色的变化 this.setDot(this.iNow); if (this.iNow === 0) { this.themeClass(true); } else { this.themeClass(false); } } else { this.slider_item.eq(this.iNow).animate({left: 0}); this.slider_item.eq(this.iNow - 1).animate({left: -this.slider_w}); } }, moveDistance: function (dis) { if (dis < 0) { this.slider_item.eq(this.iNow).css({left: dis}); if (this.iNow === this.slider_item.length - 1) { this.slider_item.eq(0).css({left: this.get_l + dis}); } else { this.slider_item.eq(this.iNow + 1).css({left: this.get_l + dis}); } } else if (dis > 0) { this.slider_item.eq(this.iNow).css({left: dis}); this.slider_item.eq(this.iNow - 1).css({left: dis - this.get_l}); } }, mousedown: function (ev) { var self = this; var oEvent = ev || window.event; var disX = oEvent.clientX; var recordX = oEvent.clientX; document.onmousemove = function (ev) { var oEvent = ev || window.event; recordX = oEvent.clientX; self.moveDistance(recordX - disX); }; document.onmouseup = function (ev) { if (disX - recordX > 0) { self.nextSlider(disX - recordX); } else if (disX - recordX < 0) { self.prevSlider(disX - recordX); } document.onmousemove = null; document.onmouseup = null; }; }, themeClass: function (state) { var self = this; if (state) { this.oWrapper.addClass('theme-white'); } else { //this.oWrapper.removeClass('theme-white'); } }, sliderChange: function (index) { var self = this; if (this.iNow < index) { this.slider_item.eq(this.iNow).animate({left: -this.slider_w}); this.slider_item.eq(index).css({left: this.slider_w}); } else { this.slider_item.eq(this.iNow).animate({left: this.slider_w}); this.slider_item.eq(index).css({left: -this.slider_w}); } this.slider_item.eq(index).animate({left: 0}, function () { if (index === 0) { self.themeClass(true); } else { self.themeClass(false); } }); }, setDot: function (index) { this.btn_item.removeClass('btn-item__cur'); this.btn_item.eq(index).addClass('btn-item__cur'); }, setData: function () { var sliderBox_w = this.settings.w * this.slider_item.length; var sliderBox_h = this.settings.h * this.slider_item.length; this.oParent.css({width: this.settings.w, height: this.settings.h}); this.slider_item.css({position: 'absolute', width: this.settings.w, height: this.settings.h}); for (var i = 1; i < this.slider_item.length; i++) { $(this.slider_item[i]).css({left: this.settings.w}); } this.oSlider.css({width: sliderBox_w, height: this.settings.h}); this.setDot(0); this.themeClass(true); }, createElem: function (oParent) { var createSlider = document.createElement('div'); var imgStr = ''; var btnStr = ''; for (var i = 0; i < this.settings.slider_num; i ++) { imgStr += '<a href="javascript:;" class="slider-item" style=" background: url(images/cont/bg'+(i + 1)+'.png) no-repeat center;"></a>'; btnStr += '<a href="javascript:;" class="btn-item"></a>'; } $(createSlider).attr({id: oParent, class: 'slider-box'}); $(createSlider).html('<div class="slider">'+imgStr+'</div><div class="btn-box">'+btnStr+'</div>'); this.oWrapper.append(createSlider); }, inital: function (oParent, opt) { var self = this; $.extend(this.settings, opt); this.createElem(oParent); this.oParent = $('#'+oParent+''); this.oSlider = this.oParent.find('.slider'); this.slider_item = this.oSlider.find('.slider-item'); this.btn_item = this.oParent.find('.btn-item'); this.setData(); this.slider_w = this.slider_item.eq(0).width(); this.slider_h = this.slider_item.eq(0).height(); this.get_l = this.settings.w; this.btn_item.click(function () { var index = $(this).index(); self.setDot(index); self.sliderChange(index); self.iNow = $(this).index(); }); this.oSlider.on('mousedown', function () { self.mousedown(); return false; }); }, constructor: Slider };