-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimple-jq-roulette.js
102 lines (83 loc) · 3.36 KB
/
simple-jq-roulette.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
'use strict';
jQuery.fn.roulette = function (settings) {
var config = {
speed: 750
};
if (settings) $.extend(config, settings);
var auto = config.auto;
var click = true;
var slide = $(this);
var count = $(slide).find('li').length;
config.mini ? count++ : count;
if (config.mini) {
if (count <= config.visible + 1)
$(config.nextSlideControl + ', ' + config.prevSlideControl).hide();
} else {
if (count <= config.visible)
$(config.nextSlideControl + ', ' + config.prevSlideControl).hide();
}
var slideLiWidth, slideUlWidth, slideMaxMargin, slideNewMargin = 0;
slideLiWidth = $(slide).find('ul li').width() + config.liMargin;
$(slide).find('ul').width(count * slideLiWidth);
slideUlWidth = $(slide).find('ul').width();
slideMaxMargin = config.mini ? slideUlWidth - config.visible * slideLiWidth : slideUlWidth;
$(window).resize(function () {
slideLiWidth = $(slide).find('ul li').width() + config.liMargin;
$(slide).find('ul').width(count * slideLiWidth);
slideUlWidth = $(slide).find('ul').width();
slideMaxMargin = config.mini ? slideUlWidth - config.visible * slideLiWidth : slideUlWidth;
});
if (config.navigation) {
$(slide).find('.b-nav');
for (i = 0; i < count; i++)
$(slide).find('.b-nav').append('<a class="b-nav__item" href="#"></a>');
}
// Функция прокручивающая слайды
function doAnimate(object, value, slideIndex) {
if (slideIndex == 0) value = 0;
$(object).stop().animate({
marginLeft: slideIndex ? -value * slideIndex + 'px' : -value + 'px'
}, config.speed, function () {
click = true;
});
};
// Прокрутка больших слайдов
$(config.nextSlideControl).click(function (e) {
e.preventDefault();
if (click == true) {
click = false;
slideMargin = parseInt($(slide).find('ul').css('margin-left'));
slideMargin = slideMargin < 0 ? slideMargin * (-1) : slideMargin;
slideNewMargin = slideMargin + slideLiWidth;
if (slideNewMargin < slideMaxMargin && slideNewMargin != slideMaxMargin)
doAnimate($(slide).find('ul'), slideNewMargin);
else
doAnimate($(slide).find('ul'), 0);
}
});
$(config.navSlideControl).click(function (e) {
e.preventDefault();
doAnimate($(slide).find('ul'), $(this).index() * slideLiWidth);
});
$(config.prevSlideControl).click(function (e) {
e.preventDefault();
if (click == true) {
click = false;
slideMargin = parseInt($(slide).find('ul').css('margin-left'));
slideMargin = slideMargin < 0 ? slideMargin * (-1) : slideMargin;
slideNewMargin = slideMargin - slideLiWidth;
if (slideMargin == 0)
doAnimate($(slide).find('ul'), (slideMaxMargin - slideLiWidth));
else
doAnimate($(slide).find('ul'), slideNewMargin);
}
});
if (auto) {
window.setInterval(function () {
if (config.direction == 'next')
$(config.nextSlideControl).trigger('click');
else
$(config.prevSlideControl).trigger('click');
}, config.interval);
}
};