Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2022, 03:51
Новичок на форуме
Отправить личное сообщение для indigo-rf Посмотреть профиль Найти все сообщения от indigo-rf
 
Регистрация: 14.02.2022
Сообщений: 2

Дергается скролл при добавлении блока в начало списка
Здравствуйте!

Я пытаюсь сделать вертикальный слайдер. Чтобы добиться эффекта бесконечной прокрутки я клонирую слайды с помощью .clone() Когда жмется кнопка Вперед, то клонируется первый слайд и ставится в конец. Когда жмется кнопка Назад, то - наоборот, клонируется последний слайд и ставится в начало. Клонируемые слайды, соответственно удаляются.

После клонирования я плавно смещаю скролл родителя:
container.stop().animate({scrollTop: shift});

Проблема: Когда жмем Вперед, удаляется первый слайд и ставится в конец. В этот момент происходит смещение скролла, а потом анимация. Выглядит это как рывок, а не как плавный скролл. При нажатии Назад все ровно и гладко.

Вот здесь код: https://jsfiddle.net/indigorf/d0m7zv8a/

Я уже перепробовал все, что в голову пришло, максимум чего добился, сделал еще хуже чем есть. Подскажите пожалуйста, как можно решить этот вопрос? Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2022, 07:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от indigo-rf
Подскажите пожалуйста, как можно решить этот вопрос?
Придумать таки алгоритм при котором не происходит дерганья и все делается плавно...

Либо воспользоваться чем-то уже имеющимся.
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2022, 08:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

бесконечная вертикальная прокрутка
Сообщение от indigo-rf
Вот здесь код
слишком много букв ... )))
ниже весь код целиком, обёртывать в $(function() {

}); нет необходимости.
$(window).on("load", function() {
  var container = $(".feedwrap__container");
  function nextSlide(e) {
    e.preventDefault();
    var slide = $(".slide:first", container), height = slide.outerHeight(true);
    container.stop().animate({scrollTop:height}, function() {
      container.append(slide);
      container.scrollTop(0);
    });
  }
  $(".feedwrap__next").on("click", nextSlide);
  function prevSlide(e) {
    e.preventDefault();
    var slide = $(".slide:last", container), height = slide.outerHeight(true);
    container.prepend(slide);
    container.scrollTop(height);
    container.stop().animate({scrollTop:0});
  }
  $(".feedwrap__prev").on("click", prevSlide);
});
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2022, 11:42
Новичок на форуме
Отправить личное сообщение для indigo-rf Посмотреть профиль Найти все сообщения от indigo-rf
 
Регистрация: 14.02.2022
Сообщений: 2

Спасибо за ответ! Ваш код работает, но есть нюанс.

Я только сейчас понял, что не написал об этом. Мне надо не просто скролить блоки, а чтобы активный блок был строго по центру родителя, а предыдущий и следующий обрезались поровну сверху и снизу. Вот скрин, как должно выглядеть: https://disk.yandex.ru/i/eolj7KemmfvYRA

И когда я пытаюсь добавить этот функционал в Ваш код, то все начинает дергаться, как и в моем коде.

Я вычисляю расстояние скролла таким образом:

var container = $(".feedwrap__container"),
    wrapHeight = $('.feedwrap').height(),
    activeSlideHeight = $('.feedwrap__container > .slide:first-child').outerHeight();

var shift = (wrapHeight - activeSlideHeight) / 4;

    container.stop().animate({scrollTop: shift});


Вычисляется почти правильно. Только shift выдается погрешность +/- 10px. Не критично на данный момент. Но вот при попытке отскролить до этого shift происходит рывок. И именно эту проблему я хочу решить.

Последний раз редактировалось indigo-rf, 14.02.2022 в 11:48.
Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2022, 21:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от indigo-rf
чтобы активный блок был строго по центру родителя,
https://jsfiddle.net/am54dgnv/
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике на кнопку переход к якорю и открытие блока Galyanov Элементы интерфейса 19 11.12.2015 21:12
Появление блока при скролле вверх dizent Общие вопросы Javascript 2 18.09.2015 06:16
При подгрузки контента скролл остается на месте zhurchik Элементы интерфейса 3 05.02.2015 22:02
Открытие\закрытие блока при нажатии на ссылку.Помогите kostya1986 Элементы интерфейса 2 19.01.2015 16:34
Событие при выборе элемента из выпадающего списка в input type="email" Алексей Горохов Events/DOM/Window 4 27.12.2013 10:38