Карусель для картинок разной ширины
Всем привет!
Возникла следующая проблема. Какое нужно создать условия, для остановки прокрутки вправо, если обнаружен последний элемент карусели(т.е фото)? Думал по координатам определять, находится ли в зоне видимости фото и тогда прокручивать на ширину фотографии карусель, но тоже не могу додуматься как это сделать. Если что, У меня обычная карусель, которая работает по маргину влево, если нужно могу написать сюда структуру этой карусели. P.S если у кого-то есть варианты как лучше это сделать, напишите пожалуйста:) P.P.S за помощь готов оплатить(за этим в лс); Сейчас черновой вариант следующий:
function Carousel(options) {
var elem = this.elem = options.elem;
this.position = 0; // текущая прокрутка карусели
elem.addEventListener("click", function(event){
this.checkDirection(event);
}.bind(this));
}
Carousel.prototype.checkDirection = function(event) {
var direction = event.target.getAttribute("data-direction");
switch (direction) {
case 'prev' :
this.prev(this.elem.offsetWidth);
break;
case 'next' :
this.next(this.elem.offsetWidth);
break;
}
};
Carousel.prototype.next = function(width) {
this.position += -width;
this.elem.querySelector(".gallery-main__photos").style.marginLeft = this.position + "px"
};
Carousel.prototype.prev = function(width) {
this.position += +width;
if (this.position >= 0) {
this.elem.querySelector(".gallery-main__photos").style.marginLeft = 0 + "px";
this.position = 0;
}
this.elem.querySelector(".gallery-main__photos").style.marginLeft = this.position + "px";
};
var carousel = new Carousel({elem: document.getElementById("gallery")});
|
noto,
сделайте макет с html и css |
noto,
алгоритм простой ширина всей галереи минус ширина окна показа -- если this.position больше этой величины сдвигают на вычисленную выше разницу а не на this.position |
рони,
http://codepen.io/anon/pen/PqmPpL Цитата:
|
Цитата:
решение по алгоритму выше и ширине 9999 http://codepen.io/anon/pen/eNWpjR |
Извиняюсь, не тот вариант скопировал просто. Поправил, gallery-main__photos ширина 9999px. Проблема в том, что картинок сейчас не на всю ширину контейнера, они могут добавляться или убираться в любой момент, по этому такой вариант не подходит. Можно конечно каждый раз менять ширину под текущий контейнер, но по моему это не очень хороший вариант.
|
noto,
какая разница сколько картинок ? алгоритм всегда отработает правильно -- вычисляется же ширина галереи на текущий момент, на момент клика. |
noto,
иного варианта просто нет. |
Можно еще наверное что то со счетчиком намутить,пример с массивом:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.onload = function(){
var arr = [1, 2, 3, 4, 5],
body = document.body,
count = 0,
len = arr.length;
alert(arr);
body.innerHTML = arr[0];
var interval = setInterval(function () {
count++;
if (count === len) {
clearInterval(interval);
} else {
arr.push(arr.shift());
body.innerHTML = arr[0];
}
}, 1000);
}
</script>
</head>
<body>
</body>
</html>
|
https://learn.javascript.ru/task/carousel вот кстати задачка похожая на вашу,там и решение к ней есть :)
|
| Часовой пояс GMT +3, время: 09:40. |