Код JS, который перемешивает изображения, заставляет веб-сайт перестать отвечать

#javascript

Вопрос:

Я создал код js, который перемешивает некоторые изображения проектов, и я сделал так, чтобы один и тот же проект не отображался одновременно более чем в одном окне ( у вас есть список изображений, которые вы хотите показать, но они должны появляться случайным образом, и как только одно из них будет показано, его нельзя будет повторить или показать снова, пока оно не исчезнет из первого окна, я думаю, что это лучшее объяснение). это работает, но проблема в том, что веб-сайт перестает работать через несколько секунд. в начале я объявил переменные randomproject и projectCheck в глобальной области. это не привело к сбою веб-сайта, но он показывал один и тот же проект во многих коробках одновременно. ( Я все еще новичок в js, поэтому код не очень хорош)

 <div class="project-viewer">
                <div id="project1"></div>
                <div id="project2"></div>
                <div id="project3"></div>
                <div id="project4"></div>
                <div id="project5"></div>
                <div id="project6"></div>
            </div>

 
 /*projects grid*/
var projects = [
    'images/project0.png',
    'images/project1.jpg',
    'images/project2.jpg',
    'images/project3.jpg',
    'images/project4.png',
    'images/project5.png',
    'images/project6.png',
    'images/project7.png',
    'images/project8.png',
    'images/project9.jpg',
    'images/project10.jpg',
    'images/project11.jpg'
],

    projectsCheck = [
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false
    ],

    project1 = document.getElementById('project1'),
    project2 = document.getElementById('project2'),
    project3 = document.getElementById('project3'),
    project4 = document.getElementById('project4'),
    project5 = document.getElementById('project5'),
    project6 = document.getElementById('project6');


function shuffle(project, projectsCheck, projects, ms) {
    'use strict';

    setInterval(function () {

        var randomproject = 0,
            oldproject = 0;
        oldproject = randomproject;
        projectsCheck[randomproject] = false;

        while (projectsCheck[randomproject] == true || randomproject == oldproject) {
            randomproject = Math.floor(Math.random() * projects.length);
        }
        projectsCheck[randomproject] = true;
        project.style.backgroundImage = "url("   projects[randomproject]   ")";

    }
        , ms);
}

shuffle(project1, projectsCheck, projects, 11000);
shuffle(project2, projectsCheck, projects, 9000);
shuffle(project3, projectsCheck, projects, 12000);
shuffle(project4, projectsCheck, projects, 10000);
shuffle(project5, projectsCheck, projects, 8000);
shuffle(project6, projectsCheck, projects, 13000);
 

Комментарии:

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

2. да, вот и все. кроме того, если изображение отображается в одном из ящиков, оно не может быть показано в другом, пока не исчезнет из первого ящика

Ответ №1:

Я не знаю почему, но когда я объявил переменные randomproject и projectCheck в функции shuffle (родительской функции), это сработало. кто-нибудь знает причину?