зацикливание изображений в jQuery - рандомизировать это? - PullRequest
3 голосов
/ 16 августа 2011

У меня есть сайт, на котором есть div с несколькими изображениями:

 <div class="slideshow">
            <img src="lib/images/grid/slideshow/a-960x305/a_pic1.jpg" width="960" height="305" alt="1" class="first" />
            <img src="lib/images/grid/slideshow/a-960x305/a_pic2.jpg" width="960" height="305" alt="2" />
            <img src="lib/images/grid/slideshow/a-960x305/a_pic3.jpg" width="960" height="305" alt="3" />
            <img src="lib/images/grid/slideshow/a-960x305/a_pic4.jpg" width="960" height="305" alt="4" />
  </div>

Обратите внимание, что первое изображение имеет имя класса с именем first. Это так, что страница показывает только одно изображение за раз css:

Вот CSS:

/*begin slideshow*/
div.slideshow                              { margin:0 0 5px 0; /*height:305px;*/ } /*for the jQuery cycle plug in*/
div.slideshow img                          { display:none;}
div.slideshow img.first                    { display:block;}
.caption                                   { text-align:center; font-weight:bold; color:#1F7FB6;}
/*end slideshow*/

Я использую библиотеку циклов jquery для циклического перемещения по изображениям следующим образом:

 <script type="text/javascript">
        $(document).ready(function () {
            $('.slideshow').cycle({
                fx: 'fade', // choose your transition type, ex: fade, scrollUp, shuffle, etc...
                timeout: 7000,
                after: function () {
                    $('.caption').html(this.alt);
                }
            });
        });
    </script>

Проблема в том, что страница всегда будет начинаться с первого изображения, есть ли способ немного рандомизировать ее, чтобы она могла начать случайное изображение, а не всегда начинаться с a_pic1.jpg?

Ответы [ 5 ]

6 голосов
/ 16 августа 2011

установите random на 1 в цикле jQuery опции

random: 0, // true для случайной последовательности, false для последовательности (неприменимо к shuffleFX)

$(document).ready(function () {
    $('.slideshow').cycle({
        fx: 'fade', // choose your transition type, ex: fade, scrollUp, shuffle, etc...
        timeout: 7000,
        after: function () {
            $('.caption').html(this.alt);
        },
        random: 1 // <-- add this
    });
});
0 голосов
/ 16 августа 2011

Оставьте бит class = 'first', а затем запустите этот код для рандомизации изображения, которое получает class = "first"

$(function(){
   var rnd = Math.floor(Math.random() * $('.slideshow img').length);

   $('.slideshow img').eq(rnd).addClass("first");           
});
0 голосов
/ 16 августа 2011

Перед тем, как позвонить .cycle(), вы можете сделать что-то вроде этого:

var images = $('.slideshow > img');
images.get(0).removeClass("first");
images.get(Math.floor(Math.random() * images.length)).addClass("first");
0 голосов
/ 16 августа 2011

Вы пробовали это?Я не пытался запустить это, но вы поняли идею.

<script type="text/javascript">
    $(document).ready(function () {

        $('.slideshow img').get(random()*($('.slideshow img').length-1)).addClass('first');
        $('.slideshow').cycle({
        ....
0 голосов
/ 16 августа 2011

Я не знаком с библиотекой циклов, но вот пример использования массива:

<script>

var banners = new Array("#banner1","#banner2","#banner3","#banner4");

var counter = //random number between 0-3;

$(document).ready(function()
{
    nextBanner();
});


function nextBanner()
{
    var currentBanner = counter;
    counter++;

    if (counter > banners.length -1)
    {
        counter = 0;
    }
    $( banners[currentBanner] ).fadeOut(300 );
    setTimeout('$( banners[counter] ).fadeIn( 300)', 100);
    setTimeout("nextBanner()", 9000);
}

</script>

<div id="banner1" class="banner-item">      
    <img src="/banner1.jpg" />
</div>

<div id="banner2" class="banner-item" style="display: none;">       
    <img src="banner2.jpg" />
</div>

..

CSS

.banner-item
{
    position: absolute; 
}
...