Помогите с рэндомом
Весь форум излазил уже, что только не делал, не могу допетрить и всё. Суть: в таблице 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);" /> |
Для вашей задачи (есля я правильно понимаю) 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. |