mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-13 04:53:26 +00:00
initial import
This commit is contained in:
163
www/include/jquery.nicoslider.js
Normal file
163
www/include/jquery.nicoslider.js
Normal file
@@ -0,0 +1,163 @@
|
||||
(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);
|
||||
|
||||
$wrapperCss= {
|
||||
'overflow':'hidden',
|
||||
'float':'left',
|
||||
'position':'relative'
|
||||
}
|
||||
|
||||
$wrapper.css($wrapperCss);
|
||||
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,
|
||||
'float' : 'right',
|
||||
'background-color' : o.color
|
||||
}
|
||||
|
||||
leftCss = {
|
||||
'width' : $scrollWidth - ($wrapper.outerWidth(true) - $wrapper.innerWidth()),
|
||||
'height' : liHeight,
|
||||
'float' : 'left',
|
||||
'background-color' : o.color
|
||||
}
|
||||
|
||||
leftScroll.css(leftCss);
|
||||
rightScroll.css(rightCss);
|
||||
|
||||
var rightScrollWidth = rightScroll.width();
|
||||
var leftScrollWidth = leftScroll.width();
|
||||
var scrollInterval = 100;
|
||||
var scrollXpos = 0;
|
||||
var scrollStepSpeed = 20;
|
||||
var speed = 8;
|
||||
var repeat = null;
|
||||
var shift = o.start;
|
||||
|
||||
//calcul position zone droite
|
||||
rightScroll.bind("mousemove", function(e){
|
||||
var x = e.pageX - ($(this).offset().left);
|
||||
scrollXpos = Math.round((x / rightScrollWidth) * scrollStepSpeed);
|
||||
});
|
||||
//calcul position zone gauche
|
||||
leftScroll.bind("mousemove", function(e){
|
||||
|
||||
var x = $(this).innerWidth() - (e.pageX - $(this).offset().left);
|
||||
scrollXpos = Math.round((x / leftScrollWidth) * scrollStepSpeed);
|
||||
});
|
||||
|
||||
//scroll a droite
|
||||
rightScroll.bind("mouseenter", function(){
|
||||
repeat = setInterval(function(){
|
||||
shift += (scrollXpos * speed);
|
||||
|
||||
if(shift > (ulWidth - $wrapperWidth) + 50)
|
||||
{
|
||||
shift = (ulWidth - $wrapperWidth) + 50;
|
||||
}
|
||||
|
||||
ul.animate({
|
||||
left: -shift
|
||||
}, 1);
|
||||
}, scrollInterval);
|
||||
});
|
||||
|
||||
//scroll a gauche
|
||||
leftScroll.bind("mouseenter", function(){
|
||||
repeat = setInterval(function(){
|
||||
shift -= (scrollXpos * speed);
|
||||
|
||||
if(shift < 0)
|
||||
{
|
||||
shift = 0;
|
||||
}
|
||||
|
||||
ul.animate({
|
||||
left: -shift
|
||||
}, 1);
|
||||
|
||||
}, scrollInterval);
|
||||
});
|
||||
|
||||
//on stop a droite
|
||||
rightScroll.bind("mouseout", function(){
|
||||
clearInterval(repeat);
|
||||
scrollXpos = 0;
|
||||
});
|
||||
|
||||
//on stop a gauche
|
||||
leftScroll.bind("mouseout", function(){
|
||||
clearInterval(repeat);
|
||||
scrollXpos = 0;
|
||||
});
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
Reference in New Issue
Block a user