Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с рэндомом (https://javascript.ru/forum/misc/2345-pomogite-s-rehndomom.html)

pudrakid 11.12.2008 07:41

Помогите с рэндомом
 
Весь форум излазил уже, что только не делал, не могу допетрить и всё. Суть: в таблице 10 картинок при наведении на одну из них, она должна заменяться на другую, но не в коем случае не повторяться.
Картинки берутся из папки.
Проблема: при неоднократном наведении пропадают картинки и иногда появляются 2-3 одинаковых.

Вот скрипт:
var arrDocImg = 1; //сколько картинок в документе
var arrNum = 10; //указываешь кол-во картинок
var imgLoc = 'img/';
var imgType = '.jpg';

var docImages = new Array;
for (i=1; i<=arrDocImg; i++) {
  docImages[i] = i;
}

var images = new Array;
for (i=1; i<=arrNum; i++) {
  images[i] = new Image();
  images[i].src = imgLoc + i + imgType;
}

function getrandom(a) {
  var min_random = 1;
  var max_random = a;
  max_random++;
  var range = max_random - min_random;
  var n=Math.floor(Math.random()*range) + min_random;
  return n;
}

function getuniquerandom(iNum) {
  var nextImg = getrandom(iNum);
  for (j=1; j<=arrDocImg; j++) {
    if ( nextImg == docImages[j]) {
      if ( (nextImg + 1 <= arrNum) ) {
        iNum = nextImg + 1;
      } else {
        if ( (nextImg - 1 >= 1) ) {
          iNum = nextImg - 1;
        }
      }
      nextImg = getuniquerandom(iNum);
    }
  }
  return nextImg;
}
function swapPicGrin(toSwap, swapId) {
  var imgFlag = true;
  var iNum = images.length - 1;
  var imgToSwap = document.getElementById(toSwap);
  var nextImgNow = getuniquerandom(iNum);
  docImages[swapId] = nextImgNow;
  imgToSwap.src = images[nextImgNow].src;
}



А вот то что я вставляю в тело html страницы
<img src="img/1.jpg" id="randimg1" class="swappedImg" onMouseOver="swapPicGrin('randimg1',1);" />
...
...
...
<img src="img/10.jpg" id="randimg10" class="swappedImg" onMouseOver="swapPicGrin('randimg10',10);" />

PavelPetrov 11.12.2008 21:33

Для вашей задачи (есля я правильно понимаю) arrDocImg должна равнятся 10-и
var arrDocImg = 10;

Количество емеющихся файлов изображений должно быть больше изображенных.(11.jpg,12.jpg...)arrNum должна быть больше arrDocImg.
Тогда function getuniquerandom() должна иметь следующий код:
function getuniquerandom(iNum) {
  var nextImg = getrandom(iNum);
  for (j=1; j<=arrDocImg; j++) {
    if ( nextImg == docImages[j]) {
      nextImg = getrandom(iNum); 
      j=0;  
    }
  }
  return nextImg;
}


И для отладки, а главное чтобы function getuniquerandom() не зацыклилась в начало function swapPicGrin() рекомендую включить проверку:
function swapPicGrin(toSwap, swapId) {
  if (arrDocImg>=arrNum) {alert("недостаточно изображений\nдля замены:\narrDocImg>=arrNum");return false;};
................................................................
}

Вот тогда все работает :)


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