2

Why is my panstart event firing just as often as pan? Isn't panstart supposed to fire just once per gesture?

var myElement = document.getElementById('myElement');
var myResult = document.getElementById('myResult');

// create a simple instance
var mc = new Hammer(myElement);

// setup pan gesture support
mc.get('pan').set({ event: 'panstart', direction: Hammer.DIRECTION_ALL });

// listen to events...
var timesFired = 0;
mc.on("panstart", function(ev) {
  timesFired++;
  myElement.textContent = ev.type;
    myResult.textContent = '# events fired: ' + timesFired;
});
#myElement {
  background: silver;
  height: 100px;
  text-align: center;
  font: 50px/100px Helvetica, Arial, sans-serif;
}

#myResult {
  text-align: center;
  font: 50px/70px Helvetica, Arial, sans-serif;
}
<script src="https://hammerjs.github.io/dist/hammer.js"></script>

<div id="myElement">(pan here)</div>
<div id="myResult"></div>

1
  • FWIW, I found I was getting multiple Hammer events firing because I'd inadvertently installed multiple handlers for the same event. Worth checking that your control flow's not doing the same.
    – Velojet
    Commented Jan 18, 2019 at 22:42

1 Answer 1

5

When you write this

mc.get('pan').set({ event: 'panstart', direction: Hammer.DIRECTION_ALL });

you are saying that an event named panstart should be fired when pan is detected. That why you get so many panstarts.

modification:

mc.get('pan').set({ **enable: true**, direction: Hammer.DIRECTION_ALL });

// listen to events...
var timesFired = 0;
mc.on("panstart pan", function(ev) {
  timesFired++;
  myElement.textContent = ev.type;
    myResult.textContent = '# events fired: ' + timesFired;
});

Not the answer you're looking for? Browse other questions tagged or ask your own question.