Estoy tratando de encontrar la forma de resolver la clase golpeada asignada a los elementos al desplazarme, pero está surtiendo efecto demasiado rápido y necesito demorarlo un poco cuando se toca en lugar de tocar mientras se desplaza, esto es mi código de cómo funciona:Detener el inicio de la función demasiado rápido cuando se desplaza
$('div, a, span').filter('[tappable][data-tappable-role]').bind('touchstart', function()
{
var self = $(this);
self.addClass(self.data('tappable-role'));
}).bind('touchend', function()
{
var self = $(this);
self.removeClass(self.data('tappable-role'));
}).bind('click', function()
{
var self = $(this),
goTo = self.data('goto');
if(typeof goTo !== 'undefined')
{
window.location = goTo;
}
});
al desplazarse, asignará la clase al elemento cuando apenas he tocado, quiero evitar que esto suceda a menos que sea tocado correctamente (sin hacer clic). Aunque traté de experimentar con setTimeout, pero eso no funciona bien, ya que retrasa, pero aún asignará la clase más adelante.
Ésta es la forma en que lo hice con el setTimeout:
var currentTapped;
$('div, a, span').filter('[tappable][data-tappable-role]').bind('touchstart', function()
{
clearTimeout(currentTapped);
var self = $(this);
var currentTapped = setTimeout(function()
{
self.addClass(self.data('tappable-role'));
}, 60);
}).bind('touchend', function()
{
clearTimeout(currentTapped);
var self = $(this);
self.removeClass(self.data('tappable-role'));
}).bind('click', function()
{
clearTimeout(currentTapped);
var self = $(this),
goTo = self.data('goto');
if(typeof goTo !== 'undefined')
{
window.location = goTo;
}
});
¿Cómo puedo hacer esto de la manera efectiva?
lo necesario para ver en tu iPhone/iPod/iPad o un emulador para probar el violín.
ACTUALIZACIÓN:
function nextEvent()
{
$(this).on('touchend', function(e)
{
var self = $(this);
self.addClass(self.data('tappable-role')).off('touchend');
})
.on('touchmove', function(e)
{
var self = $(this);
self.removeClass(self.data('tappable-role')).off('touchend');
})
.click(function()
{
var self = $(this),
goTo = self.data('goto');
if(typeof goTo !== 'undefined')
{
window.location = goTo;
}
});
}
$('div, a, span').filter('[tappable][data-tappable-role]').on('touchstart', this, nextEvent);
Hmm, no estoy seguro por qué, pero la clase golpeada solo se asigna después de que se hace clic, cuando mantengo mi dedo hacia abajo sin moverme, no muestra la clase golpeada cuando debería y se quita al desplazarse. Verifique mi edición de cómo lo hice. – MacMac
Así es como espero que se comporte, no debería pasar nada a menos que toque la pantalla y luego saque el dedo de la pantalla sin desplazarse ... si desea asignar una clase mientras su dedo está en la pantalla, asígnelo antes de vincular los eventos en nextEvent() solo recuerden quitarlo en su enlace de touchmove ... de hecho, de lo que me dice que se deshaga del touchend y lo asocie todo junto y asigne la clase tan pronto como se llame a nextEvent() ... –
Ah, excelente. Tu solución funcionó. Gracias. – MacMac