2013-05-17 3 views
0

Этот код является единственным кодом, который работал на моем сайте (построен в онлайн-шаблоне). Все остальные javascript разбились. (Я очень новичок в веб-программировании) Есть ли простое изменение, которое я могу сделать для этого кода, чтобы не иметь повторного изображения до тех пор, пока все изображения не будут отображаться?Как сделать изображение случайным, но не повторить, изменив этот код.

var delay=7000 //set delay in miliseconds 
var curindex=0 

var randomimages=new Array() 
randomimages[0]="content/indsidebar1(2).jpg" 
randomimages[1]="content/indsidebar2.jpg" 
randomimages[2]="content/indsidebar3(3).jpg" 
randomimages[3]="content/indsidebar6a.jpg" 
randomimages[4]="content/indsidebar5.jpg" 
randomimages[5]="content/indsidebar6.jpg" 
randomimages[6]="content/indsidebar7.jpg" 
randomimages[7]="content/indsidebar8.jpg" 
randomimages[8]="content/indsidebar9.jpg" 
randomimages[9]="content/indsidebar10.JPG" 
randomimages[10]="content/commersidebar1.JPG" 
randomimages[11]="content/commersidebar2.JPG" 
randomimages[12]="content/commersidebar4.JPG" 
randomimages[13]="content/commersidebar5.JPG" 
randomimages[14]="content/commersidebar6.JPG" 
randomimages[15]="content/commersidebar7.JPG" 
randomimages[16]="content/ressidebar1.JPG" 
randomimages[17]="content/ressidebar2.JPG" 
randomimages[18]="content/ressidebar3.JPG" 
randomimages[19]="content/ressidebar4.JPG" 
randomimages[20]="content/communsidebar1.JPG" 
randomimages[21]="content/communsidebar3.JPG" 
randomimages[22]="content/communsidebar4.JPG" 
randomimages[23]="content/communsidebar5.JPG" 
randomimages[24]="content/communsidebar6.JPG" 
randomimages[25]="content/communsidebar7.JPG" 
randomimages[26]="content/communsidebar8.JPG" 
randomimages[27]="content/communsidebar10.JPG" 
randomimages[28]="content/undersidebar1.jpg" 
randomimages[29]="content/undersidebar2(1).jpg" 
randomimages[30]="content/undersidebar3.jpg" 
randomimages[31]="content/undersidebar4.jpg" 
randomimages[32]="content/servicesidebar1.jpg" 
randomimages[33]="content/servicesidebar2.jpg" 
randomimages[34]="content/servicesidebar6.jpg" 
randomimages[35]="content/servicesidebar4.JPG" 
randomimages[36]="content/servicesidebar5.JPG" 

var preload=new Array() 

for (n=0;n<randomimages.length;n++) 
{ 
    preload[n]=new Image() 
    preload[n].src=randomimages[n] 
} 

document.write('<img name="defaultimage" src="'+ 
    randomimages[Math.floor(Math.random()*(randomimages.length))]+'">') 

function rotateimage() 
{ 
    if (curindex==(tempindex=Math.floor(Math.random()*(randomimages.length)))) 
     curindex=curindex==0? 1 : curindex-1 
    else 
     curindex=tempindex 

    document.images.defaultimage.src=randomimages[curindex] 
} 

setInterval("rotateimage()",delay) 
+0

Это не ответ на ваш вопрос, но это поможет вам лучше писать код. Удалите 'language =" javascript "', поскольку это устарело. Замените 'new Array()' на '[]', что является лучшим способом создания экземпляра массива. И не используйте 'document.write'; вместо этого вставьте изображение в DOM. –

+0

Вы, вероятно, захотите заглянуть в [Fisher-Yates Shuffle] (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) для рандомизации порядка изображений. – XGundam05

+0

@DerekHenderson У вас есть ссылка для '[]' лучший способ создания массива? –

ответ

0

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

var delay=7000 //set delay in miliseconds 
var curindex=0 

var randomimages=new Array() 
randomimages[0]="content/indsidebar1(2).jpg" 
randomimages[1]="content/indsidebar2.jpg" 
randomimages[2]="content/indsidebar3(3).jpg" 
randomimages[3]="content/indsidebar6a.jpg" 
randomimages[4]="content/indsidebar5.jpg" 
randomimages[5]="content/indsidebar6.jpg" 
randomimages[6]="content/indsidebar7.jpg" 
randomimages[7]="content/indsidebar8.jpg" 
randomimages[8]="content/indsidebar9.jpg" 
randomimages[9]="content/indsidebar10.JPG" 
randomimages[10]="content/commersidebar1.JPG" 
randomimages[11]="content/commersidebar2.JPG" 
randomimages[12]="content/commersidebar4.JPG" 
randomimages[13]="content/commersidebar5.JPG" 
randomimages[14]="content/commersidebar6.JPG" 
randomimages[15]="content/commersidebar7.JPG" 
randomimages[16]="content/ressidebar1.JPG" 
randomimages[17]="content/ressidebar2.JPG" 
randomimages[18]="content/ressidebar3.JPG" 
randomimages[19]="content/ressidebar4.JPG" 
randomimages[20]="content/communsidebar1.JPG" 
randomimages[21]="content/communsidebar3.JPG" 
randomimages[22]="content/communsidebar4.JPG" 
randomimages[23]="content/communsidebar5.JPG" 
randomimages[24]="content/communsidebar6.JPG" 
randomimages[25]="content/communsidebar7.JPG" 
randomimages[26]="content/communsidebar8.JPG" 
randomimages[27]="content/communsidebar10.JPG" 
randomimages[28]="content/undersidebar1.jpg" 
randomimages[29]="content/undersidebar2(1).jpg" 
randomimages[30]="content/undersidebar3.jpg" 
randomimages[31]="content/undersidebar4.jpg" 
randomimages[32]="content/servicesidebar1.jpg" 
randomimages[33]="content/servicesidebar2.jpg" 
randomimages[34]="content/servicesidebar6.jpg" 
randomimages[35]="content/servicesidebar4.JPG" 
randomimages[36]="content/servicesidebar5.JPG" 

var preload=new Array() 

for (n=0;n<randomimages.length;n++) 
{ 
    preload[n]=new Image() 
    preload[n].src=randomimages[n] 
} 


var checkArray = []; 
var length = randomimages.length; 

function generateImages() { 

    var i = generateRandomValue(); 
    if (checkArray.length <= length){ 
     if(checkArray.indexOf(i) === -1) { 
      document.write('<img name="defaultimage" src="'+randomimages[i]+'">') 
      checkArray.push(i); 
     } else { 
      generateImages();  
     } 
    } else if (checkArray.length === length) { 
     checkArray = []; 
     generateImages(); 
    } 

} 

function generateRandomValue() { 

return Math.floor(Math.random()*(randomimages.length)); 

} 

function rotateimage() 
{ 
    if (curindex==(tempindex=Math.floor(Math.random()*(randomimages.length)))) 
     curindex=curindex==0? 1 : curindex-1 
    else 
     curindex=tempindex 

    document.images.defaultimage.src=randomimages[curindex] 
} 

generateImages(); 
setInterval("rotateimage()", delay); 
+0

круто спасибо, но я действительно новичок. Я не знаю, где поставить этот код в отношении того, что у меня есть. Можете ли вы добавить это в свой код, чтобы я мог его скопировать? Спасибо за вашу помощь. – user2394920

+0

попробуйте это и дайте мне знать. – theshadowmonkey

1

Я согласен с предложением Derek Henderson для лучшего кодирования.

Возможно, вы можете использовать следующую логику:

  1. Копирование randomimages в original_randomimages массив.
  2. Выберите & отображение случайного изображения из массива randomimages (например, i-й элемент).
  3. Удалите отображаемое изображение из массива randomimages, используя метод сплайсинга (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice).
  4. Повторите шаг 2 & 3 до тех пор, пока массив случайных изображений не будет пустым.
  5. Копировать оригинал_randomimages в randomimages.
  6. Повторите еще раз с шага 2.
0

Я изменил код немного, но не проверял, поэтому, пожалуйста, проверьте его, но он должен работать.

<script language="javascript"> 

var delay=7000; //set delay in miliseconds 
var curindex=0; 

var randomimages= []; 

    randomimages[0]="content/indsidebar1(2).jpg"; 
    randomimages[1]="content/indsidebar2.jpg"; 
    randomimages[2]="content/indsidebar3(3).jpg"; 
    randomimages[3]="content/indsidebar6a.jpg"; 
    randomimages[4]="content/indsidebar5.jpg"; 
    randomimages[5]="content/indsidebar6.jpg"; 
    randomimages[6]="content/indsidebar7.jpg"; 
    randomimages[7]="content/indsidebar8.jpg"; 
    randomimages[8]="content/indsidebar9.jpg"; 
    randomimages[9]="content/indsidebar10.JPG"; 


    randomimages[10]="content/commersidebar1.JPG"; 
    randomimages[11]="content/commersidebar2.JPG"; 
    randomimages[12]="content/commersidebar4.JPG"; 
    randomimages[13]="content/commersidebar5.JPG"; 
    randomimages[14]="content/commersidebar6.JPG"; 
    randomimages[15]="content/commersidebar7.JPG"; 


    randomimages[16]="content/ressidebar1.JPG"; 
    randomimages[17]="content/ressidebar2.JPG"; 
    randomimages[18]="content/ressidebar3.JPG"; 
    randomimages[19]="content/ressidebar4.JPG"; 


    randomimages[20]="content/communsidebar1.JPG"; 
    randomimages[21]="content/communsidebar3.JPG"; 
    randomimages[22]="content/communsidebar4.JPG"; 
    randomimages[23]="content/communsidebar5.JPG"; 
    randomimages[24]="content/communsidebar6.JPG"; 
    randomimages[25]="content/communsidebar7.JPG"; 
    randomimages[26]="content/communsidebar8.JPG"; 
    randomimages[27]="content/communsidebar10.JPG"; 




    randomimages[28]="content/undersidebar1.jpg"; 
    randomimages[29]="content/undersidebar2(1).jpg"; 
    randomimages[30]="content/undersidebar3.jpg"; 
    randomimages[31]="content/undersidebar4.jpg"; 



    randomimages[32]="content/servicesidebar1.jpg"; 
    randomimages[33]="content/servicesidebar2.jpg"; 
    randomimages[34]="content/servicesidebar6.jpg"; 
    randomimages[35]="content/servicesidebar4.JPG"; 
    randomimages[36]="content/servicesidebar5.JPG"; 


//You are not using preload anywhere so it is not necessary 

var irand = Math.floor(Math.random()*(randomimages.length)); 

document.write('<img name="defaultimage" src="'+randomimages[irand]+'">'); 

var shown = []; 
shown[irand] = true; 

function rotateimage() 
{ 
    var itemp = Math.floor(Math.random()*(randomimages.length)); 
    if(shown[itemp]) 
     return; 
    document.images.defaultimage.src=randomimages[itemp]; 
    shown[itemp] = true; 
    if (shown.length == 36) 
     shown = []; 
} 

setInterval(rotateimage, delay); 

    </script> 

Update: Исправленная версия:

<script language="javascript"> 

    var delay=7000; //set delay in miliseconds 
    var curindex=0; 

    var randomimages= []; 

     randomimages[0]="content/indsidebar1(2).jpg"; 
     randomimages[1]="content/indsidebar2.jpg"; 
     randomimages[2]="content/indsidebar3(3).jpg"; 
     randomimages[3]="content/indsidebar6a.jpg"; 
     randomimages[4]="content/indsidebar5.jpg"; 
     randomimages[5]="content/indsidebar6.jpg"; 
     randomimages[6]="content/indsidebar7.jpg"; 
     randomimages[7]="content/indsidebar8.jpg"; 
     randomimages[8]="content/indsidebar9.jpg"; 
     randomimages[9]="content/indsidebar10.JPG"; 


     randomimages[10]="content/commersidebar1.JPG"; 
     randomimages[11]="content/commersidebar2.JPG"; 
     randomimages[12]="content/commersidebar4.JPG"; 
     randomimages[13]="content/commersidebar5.JPG"; 
     randomimages[14]="content/commersidebar6.JPG"; 
     randomimages[15]="content/commersidebar7.JPG"; 


     randomimages[16]="content/ressidebar1.JPG"; 
     randomimages[17]="content/ressidebar2.JPG"; 
     randomimages[18]="content/ressidebar3.JPG"; 
     randomimages[19]="content/ressidebar4.JPG"; 


     randomimages[20]="content/communsidebar1.JPG"; 
     randomimages[21]="content/communsidebar3.JPG"; 
     randomimages[22]="content/communsidebar4.JPG"; 
     randomimages[23]="content/communsidebar5.JPG"; 
     randomimages[24]="content/communsidebar6.JPG"; 
     randomimages[25]="content/communsidebar7.JPG"; 
     randomimages[26]="content/communsidebar8.JPG"; 
     randomimages[27]="content/communsidebar10.JPG"; 




     randomimages[28]="content/undersidebar1.jpg"; 
     randomimages[29]="content/undersidebar2(1).jpg"; 
     randomimages[30]="content/undersidebar3.jpg"; 
     randomimages[31]="content/undersidebar4.jpg"; 



     randomimages[32]="content/servicesidebar1.jpg"; 
     randomimages[33]="content/servicesidebar2.jpg"; 
     randomimages[34]="content/servicesidebar6.jpg"; 
     randomimages[35]="content/servicesidebar4.JPG"; 
     randomimages[36]="content/servicesidebar5.JPG"; 


    //You are not using preload anywhere so it is not necessary 

    var irand = Math.floor(Math.random()*(randomimages.length)); 

    document.write('<img name="defaultimage" src="'+randomimages[irand]+'">'); 

    var shown = []; 
    shown[irand] = true; 

    function rotateimage() 
    { 
     var itemp = Math.floor(Math.random()*(randomimages.length)); 
     if(shown[itemp]) 
      return; 
     document.images.defaultimage.src=randomimages[itemp]; 
     shown[itemp] = true; 
     if (shown.length == 36) 
      shown.pop(); 
    } 

    setInterval(rotateimage, delay); 

     </script> 
+0

попробовал. Работает для 1 вращения изображений, но затем останавливается после того, как все снимки пройдены через .... – user2394920

+0

Что касается 'preload []', это позволяло браузеру загружать и кэшировать изображения, прежде чем они понадобятся. Они не все были загружены перед использованием (поскольку их не было ждать, чтобы закончить загрузку), но их было бы неплохо. Поэтому, хотя это не обязательно, это может помочь пользователю. – XGundam05

+0

Yeah XGundam05, но без кеширования это лучше для сервера, поэтому, если пользователь не ждет просмотра всех 37 снимков, тем меньше уровень заполнения для сервера. –

0

Как я уже говорил в комментариях, я рекомендую идти с тасовки массива (Fisher-Yates мой предпочтительный алгоритм для такого вещи). Что-то похожее на:

function ShuffleImages(){ 
    for(var i = randomimages.length - 1; i > 0; i--){ 
     var j = Math.floor(Math.random() * i); 
     var _tmp = randomimages[i]; 
     randomimages[i] = randomimages[j]; 
     randomimages[j] = _tmp; 
    } 
} 

Это не приводит к столкновениям при создании рандомизации и не обеспечивает повторных изображений. Затем вы можете просто перебирать массив в обычном режиме и снова перетасовывать, когда вы достигнете конца, если это необходимо.

0

Просто удалите уже показанные изображения из источника

<script language="javascript"> 
var delay = 7000; //set delay in miliseconds 
var curindex = 0; 

var randomimages = [ 
    "content/indsidebar1(2).jpg", 
    "content/indsidebar2.jpg", 
    "content/indsidebar3(3).jpg", 
    // add the rest of your images here without , at the end 
]; 

// make a copy of your array as source 
var src = randomimages.slice(0); 

var preload = []; 

for (var n = 0; n < randomimages.length; n++) 
{ 
    preload[n] = new Image(); 
    preload[n].src = randomimages[n]; 
} 

document.write('<img name="defaultimage" src="'+randomimages[Math.floor(Math.random() * randomimages.length)]+'">'); 

function rotateimage() 
{ 
    if (curindex == (tempindex=Math.floor(Math.random()*(randomimages.length)))){ 
     curindex = curindex == 0 ? 1 : curindex - 1; 
    } else { 
     curindex = tempindex; 
    } 

    document.images.defaultimage.src = randomimages[curindex]; 

    // remove from source 
    ramdomimages.splice(curindex, 1); 

    // re-copy src when empty to start new run 
    if (randomimages.length == 0) { 
     randomimages = src.slice(0); 
    } 
} 

setInterval(
    function() { 
     rotateimage(); 
    } 
    , delay 
); 
</script> 
Смежные вопросы