Visão Geral
O Simple Gesture Detector é uma biblioteca JavaScript poderosa e flexível projetada para facilitar o reconhecimento e a manipulação de gestos de toque e mouse em elementos da web. Com suporte para uma ampla gama de gestos, incluindo toques, deslizes, pinçamentos, rotações, arrastos e muito mais, o Simple Gesture Detector permite que desenvolvedores criem interfaces de usuário interativas e responsivas de maneira eficiente.
Este plugin é altamente configurável, permitindo ajustes finos na sensibilidade dos gestos e na forma como eles são detectados. Além disso, ele suporta modificadores de teclado para interações mais complexas, tornando-o ideal para aplicações web modernas que exigem interações ricas e dinâmicas.
Recursos
- Detecção de uma variedade de gestos de toque e mouse, incluindo swipe, tap, double tap, long press, pinch, rotate e drag.
- Configuração personalizável para ajustar a sensibilidade e os parâmetros dos gestos.
- Suporte para eventos com modificadores de teclado, permitindo interações complexas.
- Mecanismo de eventos eficiente com throttling para otimizar o desempenho.
- Compatibilidade com navegadores modernos e fallback para navegadores mais antigos.
- Facilidade de integração com outras bibliotecas e frameworks.
- API simples para adicionar e remover handlers de eventos de gestos.
Instalação
Para instalar o Simple Gesture Detector, siga os passos abaixo:
- Inclua o script JavaScript no seu HTML antes do fechamento da tag
</body>
:
<script src="https://cdn.alphasystem.dev/plugins/simple-gesture-detector/latest/script-min.js"></script>
- Adicione um elemento no qual os gestos serão detectados:
<div id="gesture-area">Interaja comigo com gestos!</div>
- Inicialize o Simple Gesture Detector no seu script JavaScript, definindo as opções desejadas:
const gestureArea = document.getElementById('gesture-area');
const options = {
swipe: {
distance: 50,
time: 400,
flickVelocity: 0.8
},
doubleSwipe: {
time: 300
},
drag: {
distance: 15
},
throttleInterval: 20,
passive: true
};
const gesture = SimpleGestureDetector(gestureArea, options);
gesture.on('swipeleft', (event) => {
console.log('Swipe para a esquerda detectado!', event);
});
gesture.on('tap', (event) => {
console.log('Tap detectado!', event);
});
Observação: O SimpleGestureDetector
deve ser chamado como uma função, sem utilizar o operador new
. Instanciar com new SimpleGestureDetector()
pode causar erros de execução.
Uso
Após a instalação, você pode utilizar o Simple Gesture Detector para detectar e responder a diversos gestos. A seguir, alguns exemplos de como utilizar os principais recursos:
Detectar Swipes
Os nomes dos eventos são sensíveis a maiúsculas e minúsculas. Note que os eventos específicos de input (touch ou mouse) são gerados concatenando 'swipe' + o tipo de input + a direção, onde a direção inicia com letra maiúscula. Por exemplo, para um swipe para a esquerda com toque, o evento será swipetouchLeft
.
gesture.on('swipeleft', function (e) {
console.log('Swiped Left (All Inputs)', e);
});
// Eventos específicos de input com a capitalização correta:
gesture.on('swipetouchLeft', function (e) {
console.log('Swiped Left (Touch)', e);
});
gesture.on('swipemouseLeft', function (e) {
console.log('Swiped Left (Mouse)', e);
});
gesture.on('swiperight', function (e) {
console.log('Swiped Right (All Inputs)', e);
});
gesture.on('swipetouchRight', function (e) {
console.log('Swiped Right (Touch)', e);
});
gesture.on('swipemouseRight', function (e) {
console.log('Swiped Right (Mouse)', e);
});
gesture.on('swipeup', function (e) {
console.log('Swiped Up (All Inputs)', e);
});
gesture.on('swipetouchUp', function (e) {
console.log('Swiped Up (Touch)', e);
});
gesture.on('swipemouseUp', function (e) {
console.log('Swiped Up (Mouse)', e);
});
gesture.on('swipedown', function (e) {
console.log('Swiped Down (All Inputs)', e);
});
gesture.on('swipetouchDown', function (e) {
console.log('Swiped Down (Touch)', e);
});
gesture.on('swipemouseDown', function (e) {
console.log('Swiped Down (Mouse)', e);
});
gesture.on('doubleswipeleft', function (e) {
console.log('Double Swiped Left', e);
});
gesture.on('doubleswiperight', function (e) {
console.log('Double Swiped Right', e);
});
gesture.on('swipeleftwithmodifiers', function (e) {
console.log('Swiped Left with Modifiers:', e.modifiers);
});
gesture.on('swiperightwithmodifiers', function (e) {
console.log('Swiped Right with Modifiers:', e.modifiers);
});
Detectar Flick
gesture.on('flickleft', function (e) {
console.log('Flicked Left', e);
});
gesture.on('flickright', function (e) {
console.log('Flicked Right', e);
});
gesture.on('flickup', function (e) {
console.log('Flicked Up', e);
});
gesture.on('flickdown', function (e) {
console.log('Flicked Down', e);
});
Detectar Pinch e Rotate
gesture.on('pinch', (event) => {
console.log('Pinch detectado! Escala:', event.scale);
});
gesture.on('rotate', (event) => {
console.log('Rotação detectada! Ângulo:', event.rotation);
});
Detectar Tap e Double Tap
gesture.on('tap', function (e) {
console.log('Tap', e);
});
gesture.on('doubletap', function (e) {
console.log('Double Tap', e);
});
gesture.on('longpress', function (e) {
console.log('Long Press', e);
});
Detectar Drag
gesture.on('dragstart', (event) => {
console.log('Início do drag!', event);
});
gesture.on('drag', (event) => {
console.log('Drag em andamento:', event.x, event.y);
});
gesture.on('dragend', (event) => {
console.log('Drag finalizado!', event);
});
Configuração
O Simple Gesture Detector pode ser configurado para atender às necessidades específicas do seu projeto. As opções de configuração permitem ajustar a sensibilidade dos gestos, definir intervalos de throttling e controlar o comportamento de eventos passivos.
Opções Disponíveis
- swipe: Define os parâmetros para detecção de swipes.
- distance: Distância mínima em pixels para considerar um swipe.
- time: Tempo máximo em milissegundos para detectar um swipe.
- flickVelocity: Velocidade mínima para considerar um gesto como flick.
- doubleSwipe: Define o intervalo de tempo para detectar double swipes.
- time: Tempo máximo em milissegundos entre dois swipes para considerar um double swipe.
- drag: Define a sensibilidade para detecção de drag.
- distance: Distância mínima em pixels para iniciar um drag.
- throttleInterval: Intervalo de throttling em milissegundos para otimizar o desempenho dos eventos.
- passive: Define se os eventos de toque devem ser passivos, melhorando a performance.
Exemplo de Configuração
const options = {
swipe: {
distance: 50,
time: 400,
flickVelocity: 0.8
},
doubleSwipe: {
time: 300
},
drag: {
distance: 15
},
throttleInterval: 20,
passive: true
};
const gesture = SimpleGestureDetector(element, options);
Referência da API
O Simple Gesture Detector expõe uma API simples para inicializar a detecção de gestos e manipular eventos associados. A seguir, detalhes das funções principais disponíveis:
Função: SimpleGestureDetector
Inicializa a detecção de gestos em um elemento específico.
Parâmetros
- element:
Element
- O elemento DOM no qual os gestos serão detectados. Se não for fornecido ou inválido, o documento inteiro será usado. - options:
Object
(opcional) - Objeto de configuração para ajustar a sensibilidade e comportamento dos gestos.
Exemplo de Uso
const gesture = SimpleGestureDetector(document.getElementById('gesture-area'), options);
Métodos
on
Adiciona um handler para um gesto específico.
Parâmetros
- gesture:
String
- Nome do gesto para o qual adicionar o handler (e.g., 'swipeleft', 'tap', 'pinch'). Pode incluir um namespace opcional separado por ponto (e.g., 'swipeleft.myNamespace'). - handler:
Function
- Função a ser chamada quando o gesto é detectado.
off
Remove um handler para um gesto específico.
Parâmetros
- gesture:
String
- Nome do gesto do qual remover o handler. Pode incluir um namespace opcional separado por ponto (e.g., 'swipeleft.myNamespace'). - handler:
Function
(opcional) - Função específica a ser removida. Se não for fornecida, todos os handlers para o gesto e namespace especificados serão removidos.
Exemplo de Uso
// Adicionar handler
gesture.on('tap', handleTap);
// Adicionar handler com namespace
gesture.on('swipeleft.myNamespace', handleSwipeLeft);
// Remover handler específico
gesture.off('tap', handleTap);
// Remover todos os handlers para 'swipeleft' com namespace 'myNamespace'
gesture.off('swipeleft.myNamespace');
// Remover todos os handlers para 'swipeleft' independente do namespace
gesture.off('swipeleft');
Eventos Suportados
A seguir, uma lista de todos os eventos que podem ser manipulados usando os métodos on
e off
. Além dos eventos genéricos, o detector dispara eventos específicos de input (touch e mouse) com nomenclatura sensível a maiúsculas e minúsculas, por exemplo, swipetouchLeft
ou swipemouseRight
.
- Swipe Gestures: swipeleft, swiperight, swipeup, swipedown
- Eventos específicos de input: swipetouchLeft, swipemouseLeft, swipetouchRight, swipemouseRight, swipetouchUp, swipemouseUp, swipetouchDown, swipemouseDown
- Flick Gestures: flickleft, flickright, flickup, flickdown
- Double Swipe Gestures: doubleswipeleft, doubleswiperight
- Swipe com Modificadores: swipeleftwithmodifiers, swiperightwithmodifiers
- Tap Gestures: tap, doubletap, longpress
- Drag Gestures: dragstart, drag, dragend
- Pinch e Rotate: pinch, rotate
Cada evento fornece um objeto de evento com propriedades detalhadas sobre a interação, como posição, velocidade, ângulo, tipo de entrada e modificadores de teclado ativos.
Solução de Problemas
Se você encontrar problemas ao usar o Simple Gesture Detector, considere as seguintes etapas de solução de problemas:
- Gestos não estão sendo detectados: Verifique se o script foi incluído corretamente e se o elemento alvo está correto. Utilize o console do navegador para identificar possíveis erros.
- Handlers de eventos não estão sendo acionados: Assegure-se de que os handlers foram adicionados corretamente e que os nomes dos gestos estão escritos com a capitalização correta. Lembre-se de que os nomes são sensíveis a maiúsculas e minúsculas. Por exemplo, se o evento disparado for
swipetouchLeft
, registrá-lo comoswipetouchleft
não funcionará. - Desempenho lento: Ajuste o
throttleInterval
nas opções de configuração para otimizar o desempenho. Valores menores podem aumentar a responsividade, mas consumir mais recursos. - Compatibilidade com navegadores: Certifique-se de que você está usando um navegador compatível e que as APIs necessárias estão suportadas. A biblioteca inclui um polyfill para
Object.assign
, mas outros recursos podem variar. - Eventos com modificadores não funcionam corretamente: Verifique se as teclas modificadoras estão sendo capturadas corretamente e se os handlers estão implementados conforme esperado. Lembre-se de que apenas Shift, Ctrl, Alt e Meta são reconhecidos como modificadores.
- Inicialização incorreta: Assegure-se de chamar o
SimpleGestureDetector
como uma função sem o operadornew
. Utilizarnew SimpleGestureDetector()
pode causar erros de execução.