не получается получить правильное значение onclick

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

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

когда я нажимаю и жду завершения перехода, все работает нормально, но когда я нажимаю быстрые последовательные щелчки, я получаю числа с плавающей запятой, а не точные числа, как ожидалось (как показано в HTML ниже)

это Javascript и Jquery, смешанные вместе :

 var left = document.getElementById("left");
var right = document.getElementById("right");
var container = document.getElementById("container");


    left.addEventListener("click", function(){
        var marginLeft = container.style.marginLeft;
        var parsedMarginLeft = parseInt(marginLeft);
        console.log(parsedMarginLeft);
        if(parsedMarginLeft > -800) {
            $('#container').animate({marginLeft: '-=200px'}, 0);
        }
    });



    right.addEventListener("click", function(){
        var marginLeft = container.style.marginLeft;
        var parsedMarginLeft = parseInt(marginLeft);
        console.log(parsedMarginLeft);

        if(parsedMarginLeft < 0) {
            $('#container').animate({marginLeft: ' =200px'}, 0);
        }
    });
  

И это html, который я получаю после щелчков :

 <div id="container" style="width: 1800px; margin-left: -127.879px;">

</div>
  

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

1. Во время щелчка container.style.marginLeft не является целым числом. Следовательно, = целое число дает нецелочисленное

2. Вы можете отключить кнопки во время анимации.

Ответ №1:

Вы можете использовать селектор :animated в качестве первой строки в прослушивателях событий, чтобы проверить, работает ли анимация в контейнере div:

 var left = document.getElementById("left");
var right = document.getElementById("right");
var container = document.getElementById("container");


left.addEventListener("click", function(){
  if ($('#container:animated').length == 0) {
    var marginLeft = container.style.marginLeft;
    var parsedMarginLeft = parseInt(marginLeft);
    console.log(parsedMarginLeft);
    if(parsedMarginLeft > -800) {
      $('#container').stop().animate({marginLeft: '-=200px'}, 0);
    }
  }
});



right.addEventListener("click", function(){
  if ($('#container:animated').length == 0) {
    var marginLeft = container.style.marginLeft;
    var parsedMarginLeft = parseInt(marginLeft);
    console.log(parsedMarginLeft);

    if (parsedMarginLeft < 0) {
      $('#container').animate({marginLeft: ' =200px'}, 0);
    }
  }
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<button id="left">left</button>
<button id="right">right</button>
<div id="container" style="width: 1800px; margin-left: 0px;background-color: red;">
aaaaaaaaaaaaaaaaa
</div>  

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

1. Большое вам спасибо! это сработало!! Очень признателен 😉