Как отключить событие при его запуске из прототипа? - PullRequest
0 голосов
/ 13 мая 2019

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

Например, если я вызову событие touchstart, то событие будет отключено во время выполнения кода.

Поэтому я добавил функцию removeEventListener() in start вудалить событие для тестирования, но консоль по-прежнему появляется каждый раз, когда я касаюсь или проводя по элементу следующим образом:

enter image description here

'use strict';
(function() {
  function Proto(elem) {
    this.elem = elem;
    this.active = false;
    this.count = 1;
    this.elem.addEventListener('touchstart', (e) => this.start(e));
    this.elem.addEventListener('touchmove', (e) => this.move(e));
    this.elem.addEventListener('touchend', (e) => this.end(e));
  };
  Proto.prototype = {
    start: function(e) {
      console.log('test');
      e.currentTarget.removeEventListener("touchStart", this.start);
    },
    move: function(e) { },
    end: function(e) { this.create(this.timeout); },
    create: function(callback) {
      let binding = callback.bind(this);
      console.log('function create() & waiting .4 second . . .');
      setTimeout(binding, 400, this.trans);
    },
    timeout: function(callback) {
      let binding2 = callback.bind(this);
      console.log('function timeout() & waiting 1 second . . .');
      this.elem.classList.add('trans');
      this.elem.style.left = 90 + 'px';
      setTimeout(binding2, 1000);
    },
    trans: function() {
      this.elem.style.left = 100 + 'px';
      console.log('function trans()');
    }
  }
  let _elem = document.querySelector('.contents');
  const proProto = new Proto(_elem);
}());
      * {
        margin: 0;
        padding: 0;
      }
      .contents {
        position: absolute;
        left: 100px;
        width: 100px;
        height: 100px;
        border: 1px solid black;
      }
      .trans {
        transition: left 1000ms;
      }
    <div class="contents">
      some contents
    </div>

Я искал эту тему в Google и здесь, но не смог найти никакой информации, кроме этой статьи.

Есть ли способы остановить или отключить событие во время выполнения кода?

...