Jquery самый быстрый способ проверить, существует ли элемент на странице

0

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

var myimages = ["Afbeeldingen/ballonBlauw.png",
            "Afbeeldingen/ballonGeel.png",
            "Afbeeldingen/ballonOranje.png",
            "Afbeeldingen/ballonRoos.png",
            "Afbeeldingen/balloonGroen.png",
            "Afbeeldingen/ballonRood.png"];

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

var numberonscreen = [0,
                  0,
                  0,
                  0,
                  0,
                  0];

Каждый раз, когда я добавляю элемент, он добавляет +1 к правильному индексу в массиве выше.

Каким будет лучший способ, когда элемент будет нажат, проверьте, какое изображение оно держит, и установите счетчик для правильного индекса -1? Должен ли я просто проверить фоновое изображение и сравнить его со всеми возможными, или есть более быстрый способ?

благодаря

  • 0
    Если важна скорость, я предлагаю использовать vanilla-js вместо jQuery.
  • 1
    Вы можете добавить пользовательский атрибут с индексом изображения, а затем, когда вам нужно проверить, какое это изображение, получить значение этого атрибута и затем вычесть счетчик для правильного индекса в массиве.
Теги:

2 ответа

1
Лучший ответ

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

Что-то вроде:

$('.anImage').on('click', function() {
  var index = $(this).attr('theArrayIndexOfTheImage');
  numberonscreen[index]--;
});
1

Одна возможность:

function handler() {
    ++numberonscreen[myimages.indexOf(this.getAttribute('src')];
}

Использование native indexOf должно быть быстрее, чем сделанный вами цикл.

Но я предлагаю вместо этого использовать объект:

var numberonscreen = {};
for(var i=0, l=myimages.length; i<l; ++i) // Initialize
    numberonscreen[myimages[i]] = 0;
function handler() {
    ++numberonscreen[this.getAttribute('src')];
}

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

  • 0
    Хотя, конечно, это возможно, indexOf перечисляет myImages . Нет нужды перечислять, если вы хотите максимально быстрое выполнение. Ваше второе (и рекомендуемое решение) хорошо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню