// JavaScript Document
/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
*
* Version: 3.0.2
*
* Requires: 1.2.2+
*/
(function ($) {
var types = ['DOMMouseScroll', 'mousewheel'];
$.event.special.mousewheel = {
setup: function () {
if (this.addEventListener)
for (var i = types.length; i;)
this.addEventListener(types[--i], handler, false);
else
this.onmousewheel = handler;
},
teardown: function () {
if (this.removeEventListener)
for (var i = types.length; i;)
this.removeEventListener(types[--i], handler, false);
else
this.onmousewheel = null;
}
};
$.fn.extend({
mousewheel: function (fn) {
return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
},
unmousewheel: function (fn) {
return this.unbind("mousewheel", fn);
}
});
function handler(event) {
var args = [].slice.call(arguments, 1), delta = 0, returnValue = true;
event = $.event.fix(event || window.event);
event.type = "mousewheel";
if (event.wheelDelta) delta = event.wheelDelta / 120;
if (event.detail) delta = -event.detail / 3;
// Add events and delta to the front of the arguments
args.unshift(event, delta);
return $.event.handle.apply(this, args);
}
})(jQuery);
/**
* @package jquery
* @subpackage lofslidernews
* @copyright Copyright (C) JAN 2010 LandOfCoder.com <@emai:landofcoder@gmail.com>. All rights reserved.
* @website http://landofcoder.com
* @license This plugin is dual-licensed under the GNU General Public License and the MIT License
*/
// JavaScript Document
(function ($) {
$.fn.lofJSidernews = function (settings) {
return this.each(function () {
// get instance of the lofSiderNew.
new $.lofSidernews(this, settings);
});
};
$.lofSidernews = function (obj, settings) {
this.settings = {
direction: '',
mainItemSelector: 'li',
navInnerSelector: 'ul',
navSelector: 'li',
navigatorEvent: 'click',
wapperSelector: '.lof-main-wapper',
interval: 4000,
auto: true, // whether to automatic play the slideshow
maxItemDisplay: 3,
startItem: 0,
navPosition: 'vertical',
navigatorHeight: 100,
navigatorWidth: 210,
duration: 600,
navItemsSelector: '.lof-navigator li',
navOuterSelector: '.lof-navigator-outer',
isPreloaded: true,
easing: 'easeInOutQuad'
};
$.extend(this.settings, settings || {});
this.nextNo = null;
this.previousNo = null;
this.maxWidth = this.settings.mainWidth || 600;
this.wrapper = $(obj).find(this.settings.wapperSelector);
this.slides = this.wrapper.find(this.settings.mainItemSelector);
if (!this.wrapper.length || !this.slides.length) return;
// set width of wapper
if (this.settings.maxItemDisplay > this.slides.length) {
this.settings.maxItemDisplay = this.slides.length;
}
this.currentNo = isNaN(this.settings.startItem) || this.settings.startItem > this.slides.length ? 0 : this.settings.startItem;
this.navigatorOuter = $(obj).find(this.settings.navOuterSelector);
this.navigatorItems = $(obj).find(this.settings.navItemsSelector);
this.navigatorInner = this.navigatorOuter.find(this.settings.navInnerSelector);
if (this.settings.navPosition == 'horizontal') {
this.navigatorInner.width(this.slides.length * this.settings.navigatorWidth);
this.navigatorOuter.width(this.settings.maxItemDisplay * this.settings.navigatorWidth);
this.navigatorOuter.height(this.settings.navigatorHeight);
} else {
this.navigatorInner.height(this.slides.length * this.settings.navigatorHeight);
this.navigatorOuter.height(this.settings.maxItemDisplay * this.settings.navigatorHeight);
this.navigatorOuter.width(this.settings.navigatorWidth);
}
this.navigratorStep = this.__getPositionMode(this.settings.navPosition);
this.directionMode = this.__getDirectionMode();
if (this.settings.direction == 'opacity') {
this.wrapper.addClass('lof-opacity');
$(this.slides).css('opacity', 0).eq(this.currentNo).css('opacity', 1);
} else {
this.wrapper.css({'left': '-' + this.currentNo * this.maxSize + 'px', 'width': ( this.maxWidth ) * this.slides.length});
}
if (this.settings.isPreloaded) {
this.preLoadImage(this.onComplete);
} else {
this.onComplete();
}
};
$.lofSidernews.fn = $.lofSidernews.prototype;
$.lofSidernews.fn.extend = $.lofSidernews.extend = $.extend;
$.lofSidernews.fn.extend({
startUp: function (obj, wrapper) {
seft = this;
this.navigatorItems.each(function (index, item) {
$(item).click(function () {
seft.jumping(index, true);
seft.setNavActive(index, item);
});
$(item).css({'height': seft.settings.navigatorHeight, 'width': seft.settings.navigatorWidth});
});
this.registerWheelHandler(this.navigatorOuter, this);
this.setNavActive(this.currentNo);
if (this.settings.buttons && typeof (this.settings.buttons) == "object") {
this.registerButtonsControl('click', this.settings.buttons, this);
}
if (this.settings.auto)
this.play(this.settings.interval, 'next', true);
return this;
},
onComplete: function () {
setTimeout(function () {
$('.preload').fadeOut(900);
}, 400);
this.startUp();
},
preLoadImage: function (callback) {
var self = this;
var images = this.wrapper.find('img');
var count = 0;
images.each(function (index, image) {
if (!image.complete) {
image.onload = function () {
count++;
if (count >= images.length) {
self.onComplete();
}
};
image.onerror = function () {
count++;
if (count >= images.length) {
self.onComplete();
}
}
} else {
count++;
if (count >= images.length) {
self.onComplete();
}
}
});
},
navivationAnimate: function (currentIndex) {
if (currentIndex <= this.settings.startItem
|| currentIndex - this.settings.startItem >= this.settings.maxItemDisplay - 1) {
this.settings.startItem = currentIndex - this.settings.maxItemDisplay + 2;
if (this.settings.startItem < 0) this.settings.startItem = 0;
if (this.settings.startItem > this.slides.length - this.settings.maxItemDisplay) {
this.settings.startItem = this.slides.length - this.settings.maxItemDisplay;
}
}
this.navigatorInner.stop().animate(eval('({' + this.navigratorStep[0] + ':-' + this.settings.startItem * this.navigratorStep[1] + '})'),
{duration: 500, easing: 'easeInOutQuad'});
},
setNavActive: function (index, item) {
if ((this.navigatorItems)) {
this.navigatorItems.removeClass('active');
$(this.navigatorItems.get(index)).addClass('active');
this.navivationAnimate(this.currentNo);
}
},
__getPositionMode: function (position) {
if (position == 'horizontal') {
return ['left', this.settings.navigatorWidth];
}
return ['top', this.settings.navigatorHeight];
},
__getDirectionMode: function () {
switch (this.settings.direction) {
case 'opacity':
this.maxSize = 0;
return ['opacity', 'opacity'];
default:
this.maxSize = this.maxWidth;
return ['left', 'width'];
}
},
registerWheelHandler: function (element, obj) {
element.bind('mousewheel', function (event, delta) {
var dir = delta > 0 ? 'Up' : 'Down',
vel = Math.abs(delta);
if (delta > 0) {
obj.previous(true);
} else {
obj.next(true);
}
return false;
});
},
registerButtonsControl: function (eventHandler, objects, self) {
for (var action in objects) {
switch (action.toString()) {
case 'next':
objects[action].click(function () {
self.next(true)
});
break;
case 'previous':
objects[action].click(function () {
self.previous(true)
});
break;
}
}
return this;
},
onProcessing: function (manual, start, end) {
this.previousNo = this.currentNo + (this.currentNo > 0 ? -1 : this.slides.length - 1);
this.nextNo = this.currentNo + (this.currentNo < this.slides.length - 1 ? 1 : 1 - this.slides.length);
return this;
},
finishFx: function (manual) {
if (manual) this.stop();
if (manual && this.settings.auto) {
this.play(this.settings.interval, 'next', true);
}
this.setNavActive(this.currentNo);
},
getObjectDirection: function (start, end) {
return eval("({'" + this.directionMode[0] + "':-" + (this.currentNo * start) + "})");
},
fxStart: function (index, obj, currentObj) {
if (this.settings.direction == 'opacity') {
$(this.slides).stop().animate({opacity: 0}, {duration: this.settings.duration, easing: this.settings.easing});
$(this.slides).eq(index).stop().animate({opacity: 1}, {duration: this.settings.duration, easing: this.settings.easing});
} else {
this.wrapper.stop().animate(obj, {duration: this.settings.duration, easing: this.settings.easing});
}
return this;
},
jumping: function (no, manual) {
this.stop();
if (this.currentNo == no) return;
var obj = eval("({'" + this.directionMode[0] + "':-" + (this.maxSize * no) + "})");
this.onProcessing(null, manual, 0, this.maxSize)
.fxStart(no, obj, this)
.finishFx(manual);
this.currentNo = no;
},
next: function (manual, item) {
this.currentNo += (this.currentNo < this.slides.length - 1) ? 1 : (1 - this.slides.length);
this.onProcessing(item, manual, 0, this.maxSize)
.fxStart(this.currentNo, this.getObjectDirection(this.maxSize), this)
.finishFx(manual);
},
previous: function (manual, item) {
this.currentNo += this.currentNo > 0 ? -1 : this.slides.length - 1;
this.onProcessing(item, manual)
.fxStart(this.currentNo, this.getObjectDirection(this.maxSize), this)
.finishFx(manual);
},
play: function (delay, direction, wait) {
this.stop();
if (!wait) {
this[direction](false);
}
var self = this;
this.isRun = setTimeout(function () {
self[direction](true);
}, delay);
},
stop: function () {
if (this.isRun === null) return;
clearTimeout(this.isRun);
this.isRun = null;
}
})
})(jQuery);
|