(function ($) { $.fn.nicoslider = function (options) { var defaults = { start: 0, color: '#F6F2F1', sliderHeight: false }; var opts = $.extend({}, $.fn.nicoslider.defaults, defaults, options); return this.each(function () { new nicoslide(this, opts); }); }; var nicoslide = function (slider, o) { var $slider = $(slider); $sliderWidth = $slider.parent().innerWidth(); $sliderCss = { 'width': $sliderWidth, 'background-color': o.color }; $slider.css($sliderCss); var ul = $slider.find("ul"); var ulWidth = 0; var liHeight = 0; $slider.find("li").each(function () { ulWidth += $(this).width() + 5; ulWidth += parseInt($(this).css("padding-left")); ulWidth += parseInt($(this).css("padding-right")); ulWidth += parseInt($(this).css("margin-left")); ulWidth += parseInt($(this).css("margin-right")); liHeight = Math.max(liHeight, $(this).outerHeight()); }); //5 % of slider width $scrollWidth = Math.round(parseInt($sliderWidth) * parseFloat("0.05")); //min 30 px; if ($scrollWidth < 30) { $scrollWidth = 30; } var $wrapperWidth = Math.round(parseInt($sliderWidth) - ( 2 * $scrollWidth )); if (ulWidth > $wrapperWidth) { ul.wrapAll("
"); $wrapper = $slider.find(".wrapper"); $ulHeight = ul.height(); $wrapper.width($wrapperWidth); $wrapper.height($ulHeight); $wrapperCss = { 'overflow': 'hidden', 'float': 'left', 'position': 'relative' }; $wrapper.css($wrapperCss); ul.css('position', 'absolute'); ul.width(ulWidth); $slider.prepend("
"); $slider.append("
"); var rightScroll = $slider.find(".scrollright"); var leftScroll = $slider.find(".scrollleft"); rightScroll.append("
>
"); leftScroll.append("
<
"); $("div.rb").css('float', 'right'); rightCss = { 'width': $scrollWidth - ($wrapper.outerWidth(true) - $wrapper.innerWidth()), 'height': liHeight + 5, 'float': 'right', 'background-color': o.color, 'cursor': 'pointer', ' user-select': 'none' }; leftCss = { 'width': $scrollWidth - ($wrapper.outerWidth(true) - $wrapper.innerWidth()), 'height': liHeight + 5, 'float': 'left', 'background-color': o.color, 'cursor': 'pointer', ' user-select': 'none' }; leftScroll.css(leftCss); rightScroll.css(rightCss); var rightScrollWidth = rightScroll.width(); var leftScrollWidth = leftScroll.width(); var scrollXpos = 0; var scrollStepSpeed = 40; var speed = 8; var shift = o.start; //scroll a droite rightScroll.bind("click", function (e) { var x = e.pageX - ($(this).offset().left); scrollXpos = Math.round((x / rightScrollWidth) * scrollStepSpeed); shift += (scrollXpos * speed); if (shift > (ulWidth - $wrapperWidth) + 50) { shift = (ulWidth - $wrapperWidth) + 50; } ul.animate({ left: -shift }, 1); }); //scroll a gauche leftScroll.bind("click", function (e) { var x = $(this).innerWidth() - (e.pageX - $(this).offset().left); scrollXpos = Math.round((x / leftScrollWidth) * scrollStepSpeed); shift -= (scrollXpos * speed); if (shift < 0) { shift = 0; } ul.animate({ left: -shift }, 1); }); } }; })(jQuery);