Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2014, 09:45
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

слайдер срабатывает один раз
Здравствуйте есть такой слайдер http://hostserg.irk0.ru/ сейчас работает только кнопка "forward", я уже над ним долго мучаюсь почти доделал но срабатывает он только один раз не могу разобраться в чем дело вот весь его код
(function($) {
$.fn.scrollbox = function(config) {
  //default config
  defConfig = {
    linear: false,          // Scroll method
    step: 50,                // Distance of each single step (in pixels)
    speed: 32,              // Delay after each single step (in milliseconds)
    switchItems: 1,         // Items to switch after each scroll event
    direction: 'vertical',
    distance: 'auto',			
  };
  config = $.extend(defConfig, config);
  config.scrollOffset = config.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
  return this.each(function() {
    var container = $(this),
        containerUL,
        nextScrollId = null,
        forward,
        scrollForward,
    containerUL = container.children('ul:first-child');
    scrollForward = function() {
      var curLi,
          i,
          newScrollOffset,
          scrollDistance,
          theStep;
				containerUL.children('li:nth-child(1)').removeClass('leftSide');
		curLi = containerUL.children('li:nth-child(1)').addClass('rightSide ');
				containerUL.children('li:nth-child(2)').removeClass('scale90 leftSide');
				containerUL.children('li:nth-child(2)').addClass('scale80 leftSide');
				containerUL.children('li:nth-child(3)').removeClass('scale100');
				containerUL.children('li:nth-child(3)').addClass('scale90 leftSide');
				containerUL.children('li:nth-child(4)').removeClass('scale90 rightSide');
				containerUL.children('li:nth-child(4)').addClass('scale100');
				containerUL.children('li:nth-child(5)').removeClass('scale80 rightSide');
				containerUL.children('li:nth-child(5)').addClass('scale90 rightSide');
      scrollDistance = config.distance !== 'auto' ? config.distance :
        config.direction === 'vertical' ? curLi.height() : curLi.width();
      // offset
      if (!config.linear) {
        theStep = Math.max(3, parseInt((scrollDistance - container[0][config.scrollOffset]) * 0.3, 10));
        newScrollOffset = Math.min(container[0][config.scrollOffset] + theStep, scrollDistance);
      } else {
        newScrollOffset = Math.min(container[0][config.scrollOffset] + config.step, scrollDistance);
      }
      container[0][config.scrollOffset] = newScrollOffset;
      if (newScrollOffset >= scrollDistance) {
        for (i = 0; i < config.switchItems; i++) {
            containerUL.append(containerUL.children('li:first-child'));
        }
        container[0][config.scrollOffset] = 0;
        clearInterval(scrollingId);
      }
    };
    forward = function() {
      scrollingId = setInterval(scrollForward, config.speed);
    };
    // bind events for container
    container.bind('forward', function() { clearTimeout(nextScrollId); forward(); });
  });
};
}(jQuery));
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2014, 11:26
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Я увидел функцию forward и обработчик, который ее вызывает, а вот ф-цию backward не увидел, или у меня проблемы с глазами или это и есть причина почему работает только кнопка вперед, чтобы слайдер работал много раз нужно сделать рекурсию

Последний раз редактировалось Царь Леонид, 13.10.2014 в 11:35.
Ответить с цитированием
  #3 (permalink)  
Старый 13.10.2014, 11:35
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

все нормально вы правельно не увидили, просто я упростил код что бы было легче настраивать, а проблема в том что, срабатывает слайдер только раз, и все а потом что то не пойму почему не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2014, 11:53
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Я с мобильного сижу, поэтому html посмотреть не могу, так что просто объясню. Слайдер - это список <li>, соответственно нужно написать ф-цию - проверку, если это последний элемент, то слайдер начинает цикл со своего нулевого элемента, тоже самое надо сделать, если значение ушло в минус, ставить это в обработчики и в саму ф-цию слайдера, как-то так
Ответить с цитированием
  #5 (permalink)  
Старый 13.10.2014, 11:59
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

мне тяжело так воспринимать))
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2014, 14:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

serrrgggeee,
(function($) {
$.fn.scrollbox = function(config) {
  //default config
  defConfig = {
    step: 50,                // Distance of each single step (in pixels)
    speed: 32,              // Delay after each single step (in milliseconds)
    switchItems: 1,         // Items to switch after each scroll event
    direction: 'vertical',
    distance: 'auto',
  };
  config = $.extend(defConfig, config);
  config.scrollOffset = config.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
  return this.each(function() {
    var container = $(this),
        containerUL,
        nextScrollId = null,
        forward,
        scrollForward,
    containerUL = container.children('ul:first-child');
    scrollForward = function() {

                containerUL.children('li').removeClass('scale80 scale90 scale100 leftSide rightSide');
				containerUL.children('li:nth-child(1)').addClass('scale80 leftSide');
				containerUL.children('li:nth-child(2)').addClass('scale90 leftSide');
				containerUL.children('li:nth-child(3)').addClass('scale100');
				containerUL.children('li:nth-child(4)').addClass('scale90 rightSide');
				containerUL.children('li:nth-child(5)').addClass('scale80 rightSide');

    };
    forward = function() {
      scrollingId = setInterval(scrollForward, config.speed);
    };
    // bind events for container
    container.bind('forward', function() { clearTimeout(nextScrollId);containerUL.append(containerUL.children('li:nth-child(1)')) ; forward();});
    container.bind('backward', function() { clearTimeout(nextScrollId);containerUL.prepend(containerUL.children('li:nth-child(5)')) ; forward();});
  });
};
}(jQuery));

Последний раз редактировалось рони, 13.10.2014 в 14:51.
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2014, 15:29
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

спасибо большое, только мне не понятно две последние строчки
container.bind('forward', function() { clearTimeout(nextScrollId);containerUL.append(containerUL.children('li:nth-child(1)')) ; forward();});
мы вставляем первый или последний эллемент, а остальные получается автоматом вставляются? хотя это уже не суть есть работчий пример уже легче учить и понимать)))
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2014, 15:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от serrrgggeee
остальные получается автоматом вставляются
остальные автоматом сдвигаются влево или в право
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2014, 16:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

serrrgggeee,
на всякий случай функция scrollForward в этом случае лишняя -- достаточно перенести тело функции в ксс, добавив containerUL какой-нибудь класс
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой скрипт? Ссылка показывается только один раз maxcan Общие вопросы Javascript 1 11.04.2013 09:40
Клонирование DOM объекта или как вставить один div много раз Jmunb Общие вопросы Javascript 7 04.04.2013 14:58
Окно открывается только один раз altermann ExtJS 8 22.04.2010 11:55
Почему событие срабатывает один раз? igsavenko jQuery 6 03.03.2010 09:26
Чтоб ссылка появлялась один раз для каждого пользователя (по IP или Cookies) Sequoia Общие вопросы Javascript 2 28.01.2010 19:16