Event after swipe fires multiple times hammer.js

137 views Asked by At

I use hammer.js to create a T*nder-Style swiping. After swipe right for love or left for nope, I want to start some scripts. In my approach It actually fires multiple times after swipe to right or left. Maybe someone has some hints to avoid this issue?

var allCards = document.querySelectorAll('.match--card');
var nope = document.getElementById('nope');
var love = document.getElementById('love');

allCards.forEach(function (el) {
  var hammertime = new Hammer(el);
  var direction;

hammertime.on('pan', function (event) {
  el.classList.add('moving');
});

hammertime.on('pan', function (event) {
  if (event.deltaX === 0) return;
if (event.center.x === 0 && event.center.y === 0) return;

matchContainer.classList.toggle('match_love', event.deltaX > 0);
matchContainer.classList.toggle('match_nope', event.deltaX < 0);

var xMulti = event.deltaX * 0.03;
var yMulti = event.deltaY / 80;
var rotate = xMulti * yMulti;

event.target.style.transform = 'translate(' + event.deltaX + 'px, ' + event.deltaY + 'px) rotate(' + rotate + 'deg)';
});

hammertime.on('panend', function (event) {
  var direction = event.direction;
  el.classList.remove('moving');
  matchContainer.classList.remove('match_love');
  matchContainer.classList.remove('match_nope');

  var moveOutWidth = document.body.clientWidth;
  var keep = Math.abs(event.deltaX) < 80 || Math.abs(event.velocityX) < 0.5;

event.target.classList.toggle('removed', !keep);

if (keep) {
  event.target.style.transform = '';
} else {
  var endX = Math.max(Math.abs(event.velocityX) * moveOutWidth, moveOutWidth);
  var toX = event.deltaX > 0 ? endX : -endX;
  var endY = Math.abs(event.velocityY) * moveOutWidth;
  var toY = event.deltaY > 0 ? endY : -endY;
  var xMulti = event.deltaX * 0.03;
  var yMulti = event.deltaY / 80;
  var rotate = xMulti * yMulti;
  event.target.style.transform = 'translate(' + toX + 'px, ' + (toY + event.deltaY) + 'px) rotate(' + rotate + 'deg)';

  if (direction == 2) {
    console.log('direction nope');
    bubble_fn_swipeNope()      
   } else if (direction == 4) {
    console.log('direction love')
    bubble_fn_swipeLove()      
   }

 var activeCards = document.querySelectorAll('.match--card:not(.removed)').length;
 bubble_fn_activeCards(activeCards);

    initCards();
    }
  });
});

function initCards(card, index) {

var newCards = document.querySelectorAll('.match--card:not(.removed)');
if (!newCards.length) {
  bubble_fn_activeCards(0);
} else {
  var cL = newCards.length;
  bubble_fn_activeCards(cL);
  var card= newCards[0];
  var cardId = card.id;
  bubble_fn_activeCardUser(cardId);
}

newCards.forEach(function (card, index) {
  card.style.zIndex = allCards.length - index;
  card.style.transform = 'scale(' + (20 - index) / 20 + ') translateY(-' + 30 * index + 'px)';
  card.style.opacity = (10 - index) / 10;
});

matchContainer.classList.add('loaded');

}

initCards();
0

There are 0 answers