JavaScript Анимация Холста с setInterval

1

У меня проблема с моим кодом, он не работает, и я не вижу ошибок, которые, по моему мнению, ошибочны, потому что многие гнездования и я установили скобки в неправильном месте. Функция из кода - это анимация в анимации - это некоторые изображения в верхней части холста, и если эти изображения медленно появлялись сверху вниз, как watterfall.i надеюсь, вы сможете понять мое объяснение.

console.log("hey");
            var canvas = document.getElementById('canvas');
                var ctx = canvas.getContext('2d'); //ctx = contex
                var img = new Image();
                img.src="../img/cookie.png";

            canvas.width = canvas.scrollWidth;
            canvas.height = canvas.scrollHeight;


img.onload = function() {
                console.log("Loaded image")
                var add = 10;
                var id  = setInterval(function () {

                        if (add == 500) {

                                    ctx.clearRect(0, 0, canvas.width, canvas.height)

                                    ctx.beginPath();
                                    ctx.rect(0, 0, 1000, 1000);
                                    ctx.fillStyle = "lightblue";
                                    ctx.fill();

                                    ctx.drawImage(img,0 , 0, 100, 100);
                                    ctx.drawImage(img,100,0, 100, 100);
                                    ctx.drawImage(img,200,0, 100, 100);
                                    ctx.drawImage(img,300,0, 100, 100);
                                    ctx.drawImage(img,400,0, 100, 100);
                                    ctx.drawImage(img,500,0, 100, 100);
                                    ctx.drawImage(img,600,0, 100, 100);
                                    ctx.drawImage(img,700,0, 100, 100);

        } else {

                ctx.clearRect(0, 0, canvas.width, canvas.height)

                ctx.beginPath();
                ctx.rect(0, 0, 1000, 1000);
                ctx.fillStyle = "lightblue";
                ctx.fill();

                ctx.drawImage(img,0 , add, 100, 100);
                ctx.drawImage(img,100,add, 100, 100);
                ctx.drawImage(img,200,add, 100, 100);
                ctx.drawImage(img,300,add, 100, 100);
                ctx.drawImage(img,400,add, 100, 100);
                ctx.drawImage(img,500,add, 100, 100);
                ctx.drawImage(img,600,add, 100, 100);
                ctx.drawImage(img,700,add, 100, 100);

                add++;
            }
        }, 10)
  }

PS: извините, если некоторые ошибки в моем тексте, но я все еще ученик. : D

PPS: спасибо за помощь.

EDIT: Теперь это помогает благодарить за помощь. ** EDit2: ** теперь у меня есть более сложная проблема, код будет только эксплицировать один раз, но он должен полностью отвлечься, если кто-нибудь может мне помочь, я очень danbar.

Теги:

3 ответа

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

Я думаю, что все ваши скобки находятся в правильном месте. Большая ошибка, которую я вижу, заключается в том, что ваш оператор if говорит if (add = 1000) используя single = вместо double ==. Это означает, что вы устанавливаете add 1000 в оператор if вместо сравнения.

Edit: Еще одна проблема, с которой вы столкнулись, заключалась в том, что ваше изображение src определялось в своей onload, что на самом деле не имеет смысла, поскольку onload ожидает загрузки src.

Я сделал jsfiddle здесь, где работает ваш код, проверьте его: https://jsfiddle.net/pjkmwvp6/

  • 0
    Хорошо, спасибо, я попробую это, ошибка с = действительно глупо.
  • 0
    Нет проблем, случается с лучшими из нас.
Показать ещё 1 комментарий
1

Можете ли вы попробовать изменить это?

// Change this
if(add = 1000){

// To this
if(add === 1000){
  • 0
    Хорошо, спасибо, я попробую это, ошибка с = действительно глупо.
  • 0
    да хорошо, это работает, чем вы за помощь
1

Чтобы устранить любые сомнения, которые могут возникнуть с помощью скобок, многие редакторы и веб-службы могут выполнять кодовое украшение (ака довольно печать) для вас. Дайте ему Google. Кроме того, один из таких инструментов встроен в Firefox с Shift + F4 "slate", просто вставьте в него свой код и нажмите Ctrl + P.

Я думаю, что вы не загружаете свой образ правильно. Имейте в виду, что установка атрибута src изображений является тем, что фактически запускает его загрузку. Как и ваш код не может загружать изображение, так как команда, которая устанавливает src находится внутри обработчика onload. Положите это.

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

  • 0
    ах хорошо, что я не знаю, что

Ещё вопросы

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