Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Элементарный слайдер элементов. (https://javascript.ru/forum/dom-window/46893-ehlementarnyjj-slajjder-ehlementov.html)

Felexan 28.04.2014 16:05

Элементарный слайдер элементов.
 
Всем привет!

Есть отличный пример слайдера элементов на чистом js. Минимум кода и все работает почти как надо!

Подскажите, пожалуйста, уважаемые знатоки... Что мне нужно добавить в скрипт, чтобы элементы менялись случайным образом!?

На данный момент смена происходит по порядку с 1го по 4ый и по кругу дальше. При перезагрузке страницы в любом случае показывается первый элемент.

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

Буду признателен за помощь!

P.S:
Подключать немыслимые библиотеки и простыни кода НЕ предлагать!

ссылка на слайдер: http://jsfiddle.net/rmBj9/1/

M-ka 28.04.2014 16:11

Felexan,
http://javascript.ru/Math.random

Felexan 28.04.2014 16:16

Спасибо за оперативный ответ! Я догадывался, что именно эта функция нужна.
Дело в том, что я совершенно новичок в js и мне бы на примере моего скрипта все показать. Куда, чего и сколько!

Наверное, не до конца правильно объяснил проблему! :))

M-ka 28.04.2014 16:31

Felexan,
посмотрите применение Math.random, а дальше делайте анимацию не на основе next, а на основе Math.random для всех "p" у "anidiv". Только выбирать "р" следует не все, а только непосредственно лежащие в "anidiv", что бы не подтащить "р" внутри "р", если таково написать случайно

рони 28.04.2014 17:07

Случайный показ элементов (банеров)
 
Felexan,
:-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  p {background-color:pink; cursor:pointer;}
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function () {
       function rund(e, f) {
           function d(b) {
               for (var a = b.length - 1; 0 < a; a--) {
                   var c = Math.floor(Math.random() * (a + 1)),
                       d = b[c];
                   b[c] = b[a];
                   b[a] = d
               }
               return b
           }
           var a = [],
               c = [];
           for (i = 0; i < e; i++) a[i] = i + f;
           d(a);
           return function () {
               var b = a.shift();
               c.push(b);
               1 == a.length && (d(c), a = a.concat(c), c = []);
               return b
           }
       };

       var $p = $('#anidiv p'), len = $p.length, num = rund(len, 0);
       $p.not(':eq(' + num() + ')').hide();

       function InOut() {
           $("#anidiv p:visible").delay(5000).fadeOut(600, function () {
               $p.eq(num()).fadeIn(600, InOut);
           })
       };
       InOut();
       $('#anidiv p').mouseover(function () {
           $(this).stop(true, true);
       });
       $('#anidiv p').mouseout(function () {
           InOut();
       });
   })
  </script>
</head>

<body>
  <div id="anidiv">
    <p>Pause jquery animation on mouseover 1...</p>
    <p>Pause jquery animation on mouseover 2...</p>
    <p>Pause jquery animation on mouseover 3...</p>
    <p>Pause jquery animation on mouseover 4...</p>
</div>
</body>

</html>

Felexan 28.04.2014 17:17

Спасибо! Но у вас подключена библиотека jquery... Это уже не то!

Вот, вроде бы получилось! http://jsfiddle.net/rmBj9/22/

Только возникла новая проблема: Нужно поставить условие, чтобы два раза подряд один и тот же не показывался!

Я это забыл учесть сначала.

M-ka 28.04.2014 17:24

Felexan,
Варианты:
1. сохраняйте на теге атрибут и проверяйте его значение
2. сохраняйте маркер на обработанные элементы в функции и проверяйте, обрабатывалось ли ранее....

Если попадает на тот, который уже был, переходите к следующему...

Felexan 28.04.2014 17:28

А пример реализации можно, как оно должно выглядеть? Я просто вечно буду с этим разбираться(( Извините, если напрягаю...!

Просто полезное дело получается - многим пригодится.

jsnb 28.04.2014 17:35

Цитата:

Сообщение от Felexan (Сообщение 309654)
Спасибо! Но у вас подключена библиотека jquery... Это уже не то!

Вот, вроде бы получилось! http://jsfiddle.net/rmBj9/22/

Может я чего-то не понимаю, но по приведенной ссылке тоже подключен jQuery. В чем нативность то?

M-ka 28.04.2014 17:43

Felexan,
при использовании жквери, смотрите в сторону .data, .attr,
без использования жквери, setAttribute

Как мне кажется, это не та тема, в которой следует писать примеры работы с атрибутами и ифами, это все описано на этом ресурсе да и на множестве сторонних.... Достаточно воспользоваться поиском...
Если не способны понять описанное словами, значит следует открывать и читать основы языка..


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