Javascript Код конфликтует

var img = document.getElementsByTagName('img')[0]; //This is our image
img.style.left = '0px'; // Making the image's style "left:0px";
var catWalk = function() { //Assigning function
  if (parseInt(img.style.left) <= 1240) { //This code makes cat walk straight while image's style 'left' is lower than 1240
    img.style.transform = 'scale(1,1)';
    var oldLeft = parseInt(img.style.left);
    var newLeft = oldLeft + 7;
    img.style.left = newLeft + 'px';
  } else if (parseInt(img.style.left) >= 1240) { //This code makes cat walk back when image's style 'left' if bigger than 1240
    // clearInterval(positioning);
    img.style.transform = 'scale(-1, 1)';
    var oldLeft = parseInt(img.style.left);
    var newLeft = oldLeft - 7;
    img.style.left = newLeft + 'px';
  }
}
positioning = window.setInterval(catWalk, 10);
<img src="http://www.anniemation.com/clip_art/images/cat-walk.gif" alt="Cat walks" style=" position:absolute;">

Там есть кот, он должен ходить туда-сюда. Но код конфликтует с самим собой. Помогите пожалуйста. П.С : Я новичок.


Ответы (1 шт):

Автор решения: Денис Степанов

Введите дополнительную переменную для хранения направления кота. Это избавит от дублирования кода. Если кот выходит из разрешенного ему интервала, то меняем направление.

В вашем случае он обратно не идет, потому что как только он пересекает границу (когда уже обратно идет), начинает срабатывать первая ветвь цикла.

var img = document.getElementsByTagName('img')[0];
img.style.left = '0px'; 

let sign = 1; // переменная для хранения знака

var catWalk = function() { 

  img.style.transform = `scale(${sign},1)`;
  
  var oldLeft = parseInt(img.style.left);
  var newLeft = oldLeft + 4 * sign;
  img.style.left = newLeft + 'px';
  
  if (parseInt(img.style.left) > 440 || parseInt(img.style.left) < 0) {
    sign *= -1; // меняем направление коту
  }
}
positioning = window.setInterval(catWalk, 10);
<img src="http://www.anniemation.com/clip_art/images/cat-walk.gif" alt="Cat walks" style=" position:absolute;">

→ Ссылка