Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема реализации небольшого слайдера (https://javascript.ru/forum/jquery/44807-problema-realizacii-nebolshogo-slajjdera.html)

Иззет 02.02.2014 23:49

Проблема реализации небольшого слайдера
 
Здравствуйте, нужно прописать некий слайдер. Задача выглядит так:
Имеется массив с некоторым количеством элементов. Нужно по очереди доставать элемент из массива, выводить его на экран, далее через заданный интервал данный элемент исчезает и цикл повторяется (выводится следующий элемент массива и т.д.). При этом, после последнего элемента снова должен выводиться первый, т.е. процесс должен замыкаться.

Так и не смог доработать цикл :(

рони 03.02.2014 00:24

Иззет,
:write:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body> <p></p><p></p><p></p>
<script>
   var p = document.querySelectorAll('p')
    var arr = [1,2,3], n = 0;
    function slider()
    {
       p[0].innerHTML=arr[n];
       n++;
       if(n == arr.length) n = 0;
        window.setTimeout(slider, 1000)
    };
    var arr1 = ['раз','два','три'], n1 = 0;
    function slider1()
    {
       p[1].innerHTML=arr1[n1];
       n1 =   ++n1%arr.length;
       window.setTimeout(slider1, 1000)
    };
    var arr2 = ['|','||','|||'], n2;
    function slider2()
    {
       n2 = arr2.shift();
       arr2.push(n2)
       p[2].innerHTML=n2;
       window.setTimeout(slider2, 1000)
    };
    slider();
    slider1();
    slider2();
</script>
</body>

</html>

Иззет 03.02.2014 19:17

Спасибо. Адаптировал ваш код, ещё проблема вышла: Дело в том, что элемент массива плавно выводиться и плавно исчезать. Попробовал дописать код, но анимация работает только на 1-ом элементе.

рони 03.02.2014 20:22

Иззет,
а ваш код где?
готовое решение на jquery Помогите со слайдером пожалуйсто.
и без jquery
Автоматическая смена картинок через заданное время
поиск по форуму и будут ещё варианты

Иззет 04.02.2014 01:28

Взял за основу ваш код, получилось так:
n = 0;
function slider() {
    $('.visible').text(arr[n]).hide().show(500).delay(1500).fadeOut(1000);
    n++;
    if(n == arr.length) n = 0;
        window.setTimeout(slider, 3000)
};
slider();

Дело в том, что данную функцию нужно синхронизировать по времени с другой (с интервалом в 2 сек, та функция сменяет изображения в течение 1 сек). Но после первого цикла функция slider(); начинает отставать по времени, с чем это связано ?

рони 04.02.2014 01:32

Иззет,
исключите window.setTimeout и добавьте slider в fadeOut будет вам полная синхронизация

рони 04.02.2014 01:39

Иззет,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <style type="text/css">
   .visible{
     color: #FF0000;
     font-size: 24px;
     text-decoration: none
   }

  </style>
</head>

<body>
     <a href="#" class="visible">test</a>
  <script>
     var arr = [1,2,3,4,5]
     n = 0;
function slider() {
    $('.visible').text(arr[n]).show(500).delay(1500).fadeOut(1000,slider);
    n++;
    if(n == arr.length) n = 0;

};
slider();

  </script>
</body>

</html>

рони 04.02.2014 01:45

Иззет,
наверно я вас не понял но 2 слайдера сложно синхронизировать -- Минимальная задержка таймера делайте всё одним слайдером

Иззет 04.02.2014 12:10

Да, в этом вся загвоздка, потому что цифры я сопоставил точно. Спасибо за помощь и ссылку.


Часовой пояс GMT +3, время: 17:42.