mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-10 19:43:16 +00:00
139 lines
4.3 KiB
JavaScript
139 lines
4.3 KiB
JavaScript
(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("<div class='wrapper'></div>");
|
|
$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("<div class='scrollleft'></div>");
|
|
$slider.append("<div class='scrollright'></div>");
|
|
|
|
var rightScroll = $slider.find(".scrollright");
|
|
var leftScroll = $slider.find(".scrollleft");
|
|
|
|
rightScroll.append("<div class='rb'>></div>");
|
|
leftScroll.append("<div class='lb'><</div>");
|
|
|
|
$("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);
|