Jquery - Как сделать событие привязки клика для нескольких элементов? - PullRequest
2 голосов
/ 23 марта 2020

Я использую jquery, чтобы анимировать изображение, чтобы сделать смешанное изображение, которое прокручивает различные части при нажатии.

Я думал сделать так

$("#head").click(function () {
        if (headclix < 9) {
            $("#head").animate({
                left: "-=367px"
            }, 500);
            headclix++;
        } else {
            $("#head").animate({
                left: "0px"
            }, 500);
            headclix = 0;
        }
    });

    $("#eyes").click(function () {
        if (eyeclix < 9) {
            $("#eyes").animate({
                left: "-=367px"
            }, 500);
            eyeclix++;
        } else {
            $("#eyes").animate({
                left: "0px"
            }, 500);
            eyeclix = 0;
        }
    });

    $("#nose").click(function () {
        if (noseclix < 9) {
            $("#nose").animate({
                left: "-=367px"
            }, 500);
            noseclix++;
        } else {
            $("#nose").animate({
                left: "0px"
            }, 500);
            noseclix = 0;
        }
    });

    $("#mouth").click(function () {
        if (mouthclix < 9) {
            $("#mouth").animate({
                left: "-=367px"
            }, 500);
            mouthclix++;
        } else {
            $("#mouth").animate({
                left: "0px"
            }, 500);
            mouthclix = 0;
        }
    });

Я надеюсь, что есть лучший способ сделать это

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

$(".face").each(function (i) {
        if (i < 9) {
            $(".face").parent().animate({
                left: "-=367px"
            }, 500);
            i++;
        } else {
            $(".face").parent().animate({
                left: "0px"
            }, 500);
            i = 0;
        }
    });

HTML:

<div id="pic_box">
                <div id="head" class="face"><img src="images/headsstrip.jpg"></div>
                <div id="eyes" class="face"><img src="images/eyesstrip.jpg"></div>
                <div id="nose" class="face"><img src="images/nosesstrip.jpg"></div>
                <div id="mouth" class="face"><img src="images/mouthsstrip.jpg"></div>
  </div>

изображение в этой ссылке даст вам представление о функциональность

Спасибо.

1 Ответ

2 голосов
/ 24 марта 2020

Вы можете создать объект лица, который содержит количество кликов для каждой части лица, а также функцию для обработки события щелчка (ниже названо clickHandler). ClickHandler принимает id и вызывает соответствующую анимационную функцию для элемента, который имеет этот id.

Проверьте ниже:

var face = {
  "headClicks" : 0,
  "eyesClicks" : 0,
  "noseClicks" : 0,
  "mouthClicks" : 0,
  "clickHandler" : function(id) {
    if(this[id+"Clicks"] < 9) {
      animateLeft367(id);
      this[id+"Clicks"]++;
    } else {
      animateLeft0(id);
      this[id+"Clicks"] = 0;
    }
  }
}

function animateLeft367(id) {
  $("#" + id).animate({left: "-=367px"}, 500);
  console.log('animated ' + id + ' 367');
}

function animateLeft0(id) {
  $("#" + id).animate({left: "0px"}, 500);
  console.log('animated ' + id + ' 0');
}


$(".face").click(function() {
  face.clickHandler(this.id);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="pic_box">
    <div id="head" class="face"><img src="images/headsstrip.jpg"></div>
    <div id="eyes" class="face"><img src="images/eyesstrip.jpg"></div>
    <div id="nose" class="face"><img src="images/nosesstrip.jpg"></div>
    <div id="mouth" class="face"><img src="images/mouthsstrip.jpg"></div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...