Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.06.2015, 20:07
Новичок на форуме
Отправить личное сообщение для noto Посмотреть профиль Найти все сообщения от noto
 
Регистрация: 13.02.2015
Сообщений: 7

Карусель для картинок разной ширины
Всем привет!

Возникла следующая проблема. Какое нужно создать условия, для остановки прокрутки вправо, если обнаружен последний элемент карусели(т.е фото)? Думал по координатам определять, находится ли в зоне видимости фото и тогда прокручивать на ширину фотографии карусель, но тоже не могу додуматься как это сделать. Если что, У меня обычная карусель, которая работает по маргину влево, если нужно могу написать сюда структуру этой карусели.

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, 05.06.2015 в 20:21.
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2015, 20:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

noto,
сделайте макет с html и css
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2015, 20:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

noto,
алгоритм простой ширина всей галереи минус ширина окна показа -- если this.position больше этой величины сдвигают на вычисленную выше разницу а не на this.position
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2015, 21:05
Новичок на форуме
Отправить личное сообщение для noto Посмотреть профиль Найти все сообщения от noto
 
Регистрация: 13.02.2015
Сообщений: 7

рони,
http://codepen.io/anon/pen/PqmPpL
Сообщение от рони Посмотреть сообщение
noto,
алгоритм простой ширина всей галереи минус ширина окна показа -- если this.position больше этой величины сдвигают на вычисленную выше разницу а не на this.position
Ширина галереи указана 9999px, т.к это сайт для портфолио фотографа и заранее предугадать какая ширина будет, нельзя.

Последний раз редактировалось noto, 05.06.2015 в 21:28.
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2015, 21:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от noto
Ширина галереи указана 9999px
где ???
решение по алгоритму выше и ширине 9999
http://codepen.io/anon/pen/eNWpjR
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2015, 22:00
Новичок на форуме
Отправить личное сообщение для noto Посмотреть профиль Найти все сообщения от noto
 
Регистрация: 13.02.2015
Сообщений: 7

Извиняюсь, не тот вариант скопировал просто. Поправил, gallery-main__photos ширина 9999px. Проблема в том, что картинок сейчас не на всю ширину контейнера, они могут добавляться или убираться в любой момент, по этому такой вариант не подходит. Можно конечно каждый раз менять ширину под текущий контейнер, но по моему это не очень хороший вариант.
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2015, 22:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

noto,
какая разница сколько картинок ? алгоритм всегда отработает правильно -- вычисляется же ширина галереи на текущий момент, на момент клика.
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2015, 22:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

noto,
иного варианта просто нет.
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2015, 22:26
Аспирант
Отправить личное сообщение для Endy Посмотреть профиль Найти все сообщения от Endy
 
Регистрация: 15.05.2015
Сообщений: 41

Можно еще наверное что то со счетчиком намутить,пример с массивом:
<!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>
Ответить с цитированием
  #10 (permalink)  
Старый 05.06.2015, 22:31
Аспирант
Отправить личное сообщение для Endy Посмотреть профиль Найти все сообщения от Endy
 
Регистрация: 15.05.2015
Сообщений: 41

https://learn.javascript.ru/task/carousel вот кстати задачка похожая на вашу,там и решение к ней есть
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Помогите, пжлста, найти (или написать) скрипт для смены картинок. Artweb Работа 9 25.02.2011 11:28
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Js для переключения картинок Konstantin2009 Ваши сайты и скрипты 1 10.02.2009 00:41