Учим Java Script 13. Слайдер по таймеру

Поділитися
Вставка
  • Опубліковано 21 січ 2025

КОМЕНТАРІ • 110

  • @Spectrum.Luxury
    @Spectrum.Luxury 5 років тому +4

    сделал как у вас и консоль выдает такое. Uncaught ReferenceError: Cannot access 'timer' before initialization
    at autoSlider. Я переставил вызов функции autoSlider(); после определения переменной timer и все заработало. Переставил обратно перед переменной как у вас - не работает. Почему так?

  • @leonziger2496
    @leonziger2496 5 років тому

    Классный лектор. Просто, доступно, приятно на слух.

  • @_pheax
    @_pheax 6 років тому +1

    Ваши уроки мне очень помогают, спасибо !!

    • @itgid
      @itgid  6 років тому

      Спасибо!

  • @АлАк-ы5и
    @АлАк-ы5и 7 років тому +31

    Спасибо за урок. можете ли сделать урок со слайдером, в котором при прокрутке картинки не возвращались бы к первой а менялись постоянно по кругу и с рабочими кнопками влево вправо, чтобы после нажатия слайдер останавливался?

    • @itgid
      @itgid  6 років тому +8

      ua-cam.com/video/gBgD9ieCJpE/v-deo.html

  • @vladimirishchuk2808
    @vladimirishchuk2808 2 роки тому

    Спасибо за урок.
    Вместо setTimeout использовал setInterval. А также удалил clearTimeout и autoslider из функции sliderLeft. И вроде работает аналогично.
    Еще раз спасибо.

  • @alex.zaslavskyi
    @alex.zaslavskyi 6 років тому +13

    А я немножко не понял про обнуление таймера. Зачем это? Потому что я не заметил изменений до и после его применения...

    • @Писательназаборе
      @Писательназаборе 4 роки тому

      Обнуление нужно для функции sliderLeft(то есть в autoSlider она вовсе не нужна), для того, чтобы остановить зацикливание и начать прокрутку вручную.

    • @programer8
      @programer8 3 роки тому

      @@Писательназаборе так она есть в sliderLeft() но зацикливание не прекращается

  • @ВероникаЧернобай-ъ8л

    я сделала свой ПЕРВЫЙ СЛАЙДЕР!!!!! Я так РАДА!!!!! Спасибо)))))

  • @mashasashina7726
    @mashasashina7726 7 років тому +26

    Извините, может вопрос покажется глупым. Не пойму какую роль играет функция clearTimeout? мне показалось что с ней и без нее все работает одинаково..

    • @itgid
      @itgid  7 років тому +18

      Да, на первый взгляд так и есть. Но если повторить вызов таймера (допустим повторным нажатием на кнопку) то произойдет ускорение таймера и будет явное нарушение работы. Поэтому мы по необходимости останавливаем таймер, и запускаем его снова.

    • @victorkas2279
      @victorkas2279 6 років тому

      А если кнопки убрать (влево вправо)? То и clearTimeout не нужен?

    • @ВячеславКоростин-у2ч
      @ВячеславКоростин-у2ч 6 років тому

      нужен - ведь он и обрабатывает процесс - вам не надо нажимать на кнопки, а он сам запускает функции

    • @_Fantom_.
      @_Fantom_. 5 років тому

      Sergey Styrov, Точно, переместил autoSlider выше, и сработала остановка слайдера после прокрутки..

    • @aligu7
      @aligu7 4 роки тому

      @@ВячеславКоростин-у2ч I have the same logo xD

  • @ichelsea
    @ichelsea 4 роки тому

    Спасибо вам огромное за ваш искренний труд.

  • @ИванСтавитцский
    @ИванСтавитцский 7 років тому +5

    А можно сделать так чтобы он не прокручивал все картинки и опять с первой начинает. А убрать прокрутку чтобы плавно переходил на первую. чтобы не было видно что прокрутилось

  • @cg_man
    @cg_man 5 років тому +2

    Если я в начале размещаю autoSlider(); код выдает пару ошибок типа Не удается получить доступ ... до инициализации... Поставил в конце, все заработало.

  • @maxmax8736
    @maxmax8736 5 років тому +1

    как сделать смешение в право

  • @Александр-ц4т8в
    @Александр-ц4т8в 6 років тому

    Спасибо большое за урок.

  • @9keepa
    @9keepa 7 років тому +1

    все вроде понятно, а вроде нет..Можно как то разбить по блокам какое действие первое выполняется и последующая ...схематично нарисовать?

  • @другМаша
    @другМаша 3 роки тому

    Круто, спасибо большое за видео

  • @ДаникБогач
    @ДаникБогач 6 років тому +1

    спс большое ти мне и многим людям помог делай видео дальше,у тебя хорошо виходит

    • @itgid
      @itgid  6 років тому +1

      Спасибо. Стараюсь!

  • @betsxxl7297
    @betsxxl7297 4 роки тому

    Вау, ты сделал то что я думал сделать будет очень сложно

    • @itgid
      @itgid  4 роки тому

      нет :)

  • @ДаутКонджария
    @ДаутКонджария 11 місяців тому

    Всем привет! Благодарю за урок!
    Не понял для чего нужен метод clearTimeout..
    Я его закоментил, разницы при выводе не заметил.

  • @TigraDP
    @TigraDP 6 років тому +2

    Добрый день. Подскажите, пожалуйста. Если не удалять код кнопки left, то при ее нажатии событие как бы прописывается в цикл и начинает повторяться постоянно. То есть каждый цикл таймера вызывает как бы нажатие кнопки. Если кликнуть два раза, то будет срабатывать два раза. Почему так происходит? И как этого избежать, что бы функция кнопки осталась (например пользователь может наблюдать за слайдером в автоматическом режиме, а при желании может кнопкой "проклацать"). Благодарю.

    • @itgid
      @itgid  6 років тому

      При нажатии происходит событие. Событие вызывает функцию, функция ставиться в очередь. Сколько раз нажали, столько раз поставили в очередь. Чтобы такого не было, нужно отключать событие после клика. Потом, после выполнения функции - включать обратно.

  • @Unknown_User768
    @Unknown_User768 5 років тому

    спасибо за урок

  • @texno5440
    @texno5440 6 років тому

    очень красиво и понятно спасибо лайк.

  • @alexandralexandrovich733
    @alexandralexandrovich733 6 років тому +1

    Возможно это глупый вопрос. Но все же. Если поместить глобальные переменные внутрь основной функции, то код уже корректно не работает. Если это долго объяснять, то подскажите, что почитать. Заранее спасибо. Переменную "timer" можно и перенести, но не вторую с начальным положением.

    • @itgid
      @itgid  6 років тому +1

      Почитать области видимости переменных в JavaScript

    • @alexandralexandrovich733
      @alexandralexandrovich733 6 років тому +1

      @@itgid Читал и даже показалось, что понимаю. Я догадался, что в этом дело, но точного понимания не приходит. Спасибо. Буду перечитывать.

    • @BloodVesselTM
      @BloodVesselTM 5 років тому

      при добавлении переменной в функцию выдаст не очень верный результат, так как при вызове функции переменная будет пересоздоваться

  • @maxkrutov39
    @maxkrutov39 6 років тому +1

    Здравствуйте, подскажите пожалуйста, как можно данный слайдер сделать фоном блока, и чтобы вверху у него было навигационное меню, якобы фиксированным, и слайдер работал под ним как фон? Я пробовал делать менюшке position: fixed; но потом понял что идея не самая лучшая, так как менюшка будет фиксироваться по экрану а не по блоку. Абсолютное позиционирование тоже не хочется применять, чтобы не вырвать менюшку из потока. Посоветуйте пожалуйста как можно поступить?
    Заранее спасибо Вам за Ваш ответ!

    • @itgid
      @itgid  6 років тому +1

      делаете общий блок. В него кладете слайдер а сверху ваше меню. Меню делаете absolute или relative, и задаете z-index больше чем у слайдера.

    • @maxkrutov39
      @maxkrutov39 6 років тому

      Здравствуйте, спасибо Вам за Ваш ответ! Я перед тем как посоветоваться с Вами, примерно так и делал - общему блоку задавал relative, а менюшке absolute, с z-index:10; и небольшим позиционированием через top и left. Всё работало прекрасно!!! Единственное, что меня смущает, я слышал что нельзя вырывать меню и логотип из потока позиционированием. Правильно ли это? А саму структуру сайта я делаю через bootstrap 4, не даст ли такой подход сбой в работе bootsrap 4, при дальнейшем взаимодействии с сайтом?
      Заранее спасибо Вам за Ваш ответ и поддержку!

    • @itgid
      @itgid  6 років тому +1

      Тяжело ответить не видя самого кода верстки. Думаю не вызовет, но без кода 100% сказать сложно.

    • @maxkrutov39
      @maxkrutov39 6 років тому

      Спасибо Вам! Сейчас досконально освою слайдер по двум Вашим урокам и буду доделывать код!

  • @vanyavoskres
    @vanyavoskres 5 років тому

    Здравствуйте. Могу быть не прав, но разве не легче все это сделать через setInterval ? И не нужно никаких сбросов и тд, одна строчка кода.

  • @programer8
    @programer8 3 роки тому

    Спасибо за урок, но осталось непонятным зачем нужен clearTimeout(timer), на функционал не влияет

  • @romarampagev5044
    @romarampagev5044 7 років тому +1

    ....timer = setTimeout(function () { ..... почему перед function Открывается скобка и нигде потом не закрывается? не понял фишку

    • @itgid
      @itgid  7 років тому +2

      закрывается, но позже.

  • @НазарБалабан
    @НазарБалабан 6 років тому

    замість setTimeout можна було покласти setInterval і не потрібно два рази писати autoSlider()....чи це буде правельний варіант??

  • @timyrfilatov4315
    @timyrfilatov4315 6 років тому

    А можно ли сделать что-бы было намного плавнее и без остановок?. Я пробовал увеличивать задержки но получается лажа какая-то

    • @itgid
      @itgid  6 років тому +1

      Можно, просто подходы другие - код нужно переделывать.

    • @timyrfilatov4315
      @timyrfilatov4315 6 років тому

      @@itgid Если я посмотрел 20 уроков, если хорошо подумаю, я смогу это сделать сам. Что спрашиваю что-бы время зря не терять. Буду гуглить, перебирать все возможные варианты, а в итоге что - ничего.

  • @МішаВинар-й3з
    @МішаВинар-й3з 6 років тому

    Спс за хорошие видео

  • @rgmotd7990
    @rgmotd7990 5 років тому

    а как сделать так, чтобы время самого скролла было больше?

    • @Spectrum.Luxury
      @Spectrum.Luxury 5 років тому +2

      это transition который ты указываешь в стилях. Вместо 1s укажи 2s и так далее. s - секунда

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @victorkas2279
    @victorkas2279 6 років тому +1

    Вопрос: как остановить слайдер при наведении?

    • @itgid
      @itgid  6 років тому +2

      Добавьте событие onmouseover которая делает clearTimeout.

    • @victorkas2279
      @victorkas2279 6 років тому

      что-то не так делаю опять =)
      row.onmouseover = clearTimeout(timer); row - это полоса из урока. остальное как в уроке. Неверно назначил событие?
      после
      toTop = 0;
      row.onmouseover = clearTimeout(timer);

    • @romashka7519
      @romashka7519 6 років тому +3

      var slider = document.getElementById('slider');
      // если наведёшь на слайдер, то он остановится
      slider.onmouseover = function() {
      clearTimeout(timer);
      };
      // если уберешь мышку со слайдера, он вновь запуститься
      slider.onmouseout = function() {
      autoSlider();
      };

    • @SunlighT_90
      @SunlighT_90 6 років тому +1

      @@romashka7519 Разбирался сам но запутался. Спасибо за код , очень помог !!!

    • @jinke5935
      @jinke5935 5 років тому

      @@romashka7519 я так и прописал в код, то, что вы выше сбросили.) Но у меня теперь появилась проблема: всего 7 картинок загружено (как и в видео), а слайдер двигает картинки до 5-й только, а потом снова к началу. Не подскажете, с чем это связано, в чём причина?

  • @hazcker5746
    @hazcker5746 7 років тому

    Здравствуйте. Я хочу сделать чтобы слайдер работал как обычно, с помощью кнопок "влево", "вправо" но при нажатии на кнопку "старт" запускался автоматически. у меня всё получилось кроме одного. Я хочу чтобы когда нажимал ещё раз на кнопку старт, слайдер прекратил автоматическое движение. Вот мой код, что посоветуете?
    document.getElementById('slider-left').onclick = sliderLeft;
    document.getElementById("slider-right").onclick = sliderRight;
    document.getElementById("slider-start").onclick = Autoslider;
    var left = 0;
    var timer = 0;
    function sliderLeft() {
    var polosa = document.getElementById("polosa")
    left = left - 128;
    if (left 0) left = -768;
    polosa.style.left = left + "px";
    }
    // Эта функция полностью не дописана тк я не знаю как её закончить
    function Autoslider() {
    timer = 1;
    function () {
    if (timer = 1) {
    timer = setInterval(sliderLeft, 1000);
    }else {}
    }
    }

    • @itgid
      @itgid  7 років тому +1

      Тяжело понять что и где по одному коду. Я вас попрошу, если можно, выложить полностью код (html, css, js) на сервис типа codepen или fiddle.

  • @komaibra7988
    @komaibra7988 6 років тому +1

    у меня почему то через раз ускоряется, потом в норму и так по циклу

    • @komaibra7988
      @komaibra7988 6 років тому

      а всё, после метода очистки всё стабилизировалось ( clearTimeout(); )

    • @itgid
      @itgid  6 років тому +1

      вам после нажати кнопки нужно останавливать таймер и начинать заново. Иначе - ускорение!

    • @komaibra7988
      @komaibra7988 6 років тому

      JavaScript решает спасибо за ответ

  • @unotuno7894
    @unotuno7894 6 років тому +1

    5:59 вы говорите что и с большой бы Out отработало,ноо я напоролся) с большой cleatTimeOut = не работает) clearTimeout = работает, а так спасибо вам!

  • @alexandertarasenko3038
    @alexandertarasenko3038 7 років тому

    Окей. Но как быть если изображения, скажем размером 1000 на 600? И нужно чтоб была одна картинка, затем она бы сменялась другой и т.д.?

    • @papa_paskualle
      @papa_paskualle 7 років тому +1

      Alexander Tarasenko в процентах, одна картинка это 100%, width контейнера для картинок 500% к примеру, при прокрутке слайдера контейнер сдвигай на -100%

  • @МихаилЗавадский-е8м

    Спасибо

  • @Wamuradoff
    @Wamuradoff 6 років тому

    все это очень круто конечно) мне нравится очень то что вы делаете. и вопросы. почему не сделали чтобы они все кругом ходили? и почему не пользуетесь let?

    • @itgid
      @itgid  6 років тому

      1. Почему я должен делать чтобы они кругом ходили? Здесь видео для начинающих. А здесь ua-cam.com/video/gBgD9ieCJpE/v-deo.html - более продвинутый уровень и картинки ходят кругом. Второе - как ни странно, но это видео для детей изучающих js. На тот момент детям не преподавали ES6. И babel давать детям как-то странно, если задача "познакомить" с языком. Более того, в данном плейлисте нет ES6 - поскольку другие задачи, да и год 2016.

  • @edgarhovhannisyan7676
    @edgarhovhannisyan7676 6 років тому +1

    Переход очень бистро получилось, там объясняете var очень тщательно, а тут сразу зацикливание функции, в принципе интересно но с помощью предыдущих уроков очень трудно понять.

    • @itgid
      @itgid  6 років тому +2

      ну, я эти видео писал для курсов, где все предыдущие уроки мы проходили.

  • @pavelsamsonenka3155
    @pavelsamsonenka3155 6 років тому +1

    Ну что, так никто и не смог сделать слайдер по кругу? Может автор подскажет, м? Как же сделать так, чтоб картинки крутились по кругу?

    • @itgid
      @itgid  6 років тому +1

      подсказать не проблема. Вычисляем позицию изображения - если оно ушло влево на 2 позиции переносим вправо, если в право - то влево. Удобнее это сделать в виде массива.

    • @pavelsamsonenka3155
      @pavelsamsonenka3155 6 років тому

      @@itgid Спасибо, буду пробовать

    • @BloodVesselTM
      @BloodVesselTM 5 років тому

      мне кажется нужно использовать 3д пространство посмотри как делать 3д куб в css и думаю это много что расскажет

    • @Timofeyaka
      @Timofeyaka 5 років тому

      @@itgid Не могли бы вы более подробно рассказать как сделать чтобы слайды двигались только вперед? Кусок кода например сюда вставить. Для новичков.

  • @SirGmx
    @SirGmx 6 років тому

    сделал все точно так же,но не работает,никаких ошибок не выдает и с синтаксисом все в порядке

    • @itgid
      @itgid  6 років тому

      Скидывайте код в архиве и дамп базы данных = попробую помочь.

    • @SirGmx
      @SirGmx 6 років тому

      ребутнул комп,и все заработало)

  • @tareto1000
    @tareto1000 3 роки тому

    классно часы тикают в комнате

  • @victorkas2279
    @victorkas2279 6 років тому

    Попробовал сделать слайдер снизу вверх. Не могу найти ошибку, ругается консоль, посмотрите пожалуйста.
    codepen.io/vic4884/pen/oqwGWN?editors=0010 По идее, там ничего особо менять не надо, только направление, не left а top, но не работает. Ошибка оказалась в слове top, js почему-то не дает его использовать в качестве переменной, заменил на toTop, заработало

    • @itgid
      @itgid  6 років тому +1

      служебное слово. Нужно в этом быть осторожнее.

  • @Aveonplay64
    @Aveonplay64 6 років тому

    Извините, никто случаем не сталкивался с проблемой, если брать несколько картинок и чтобы они двигались по очереди, и из за этого обтекание не работает, картинки стоят друг над другом и движется только одна первая, остальные невидимы и находятся под ней.
    вот код:
    imgur.com/a/cAQrs6q

  • @jacklondon5840
    @jacklondon5840 7 років тому +1

    не просто так ведь кнопку убрали )))

  • @maratmagomedov3541
    @maratmagomedov3541 6 років тому

    Оставьте какие нибудь реквизиты, благодарные юзеры закинут вам монету за труды.

    • @itgid
      @itgid  6 років тому

      Под этим видео все реквизиты ua-cam.com/video/0FAOtEzigeM/v-deo.html

  • @angelofdeath3410
    @angelofdeath3410 7 років тому +4

    взял идею, чуть подправил на флексе и марджинах ибо posr перекрывает тень от меню которая над ним нужна) codepen.io/r1co/pen/EmmyRr
    вышло очень минимально. до этого думал на jquery делать, но, поскольку делаю для себя а не заказ, то можно не закольцованный слайдер. зато опыт, а не просто плагин)
    upd: немного танцев с переменной и, возможно, костылей = готовый слайдер с обраткой не зависящий от кол-ва картинок и их размеров, вроде как)) думаю я что-то не знаю и он сломается при каких-то условиях, но как первый норм.

    • @sancho-paska
      @sancho-paska 7 років тому +1

      спасибо за классный и интересный код!
      я вот только не понял почему у функциях slide и slideRev slides.style.marginLeft=-pos+"00"+"%"
      точней, почему pos в двоих случаях с унарным минусом?

  • @ВиталийСлободянюк-х8м

    немного сложна для моих мозгов :(

    • @TheMakerdream
      @TheMakerdream 7 років тому

      скорее всего из-за анонимной функции. Когда функция вист отдельно -это легче для понимания, конечно если код не большой.

  • @joeyjordison8552
    @joeyjordison8552 6 років тому

    У кого получилось сделать кнопку "на право"? поделитесь ,я голову сломал

    • @voltamper96
      @voltamper96 6 років тому +1

      Вот мой полностью Js файл! c двух кнопками + autoSlider
      autoSlider один круг делает и останавливается дальше по кнопкам.
      document.getElementById('slider-left').onclick = sliderLeft;
      autoSlider();
      var a;
      a = 0;
      var timer;
      var timer1 = 0;
      function autoSlider()
      {
      timer = setInterval(sliderRight, 350);
      }
      function sliderLeft() {
      var polosa = document.getElementById('polosa');
      a = a +128;
      if (a>0)
      {
      a = -512;
      }
      polosa.style.left = a+'px';
      }
      document.getElementById('slider-right').onclick = sliderRight;
      function sliderRight() {
      var polosa = document.getElementById('polosa')
      a = a -128;
      if (a

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/

  • @СУМАЯНУРЗОДА-р8п
    @СУМАЯНУРЗОДА-р8п 2 роки тому

    а где код css,.,?????????????/