jQuery.tap.js
/**
* Author: Sergey Bondarenko (BR0kEN)
* E-mail: broken@propeople.com.ua
* Github: https://github.com/BR0kEN-/jTap
* Updated: May 27, 2014
* Version: 0.2.8
*/
(function($, _) {
'use strict';
/**
* @param (object) ev - extending object, which contain event properties.
* - (string) start - start event depending of @isTap.
* - (string) end - start event depending of @isTap.
*/
var ev = {
start: 'touchstart mousedown',
end: 'touchend mouseup'
};
$.event.special[_] = {
setup: function() {
$(this).off('click').on(ev.start + ' ' + ev.end, function(e) {
/**
* Adding jQuery event to @ev object depending of @isTap.
*
* Attention: value of this property will change two time
* per event: first time - on start, second - on end.
*/
ev.E = e.originalEvent.changedTouches ? e.originalEvent.changedTouches[0] : e;
}).on(ev.start, function(e) {
/**
* Function stop if event is simulate by mouse.
*/
if (e.which && e.which !== 1) {
return;
}
/**
* Extend @ev object from event properties of initial phase.
*/
ev.target = e.target;
ev.time = new Date().getTime();
ev.X = ev.E.pageX;
ev.Y = ev.E.pageY;
}).on(ev.end, function(e) {
/**
* Compare property values of initial phase with properties
* of this, final, phase. Execute event if values will be
* within the acceptable and set new properties for event.
*/
if (
ev.target === e.target &&
((new Date().getTime() - ev.time) < 750) &&
(ev.X === ev.E.pageX && ev.Y === ev.E.pageY)
) {
e.type = _;
e.pageX = ev.E.pageX;
e.pageY = ev.E.pageY;
$.event.dispatch.call(this, e);
}
});
},
/**
* Disassembling event.
*/
remove: function() {
$(this).off(ev.start, false).off(ev.end, false);
}
};
$.fn[_] = function(fn) {
return this[fn ? 'on' : 'trigger'](_, fn);
};
})(jQuery, 'tap');
DEMO
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<script type="text/javascript" src="js/jquery-2.1.4.js" ></script>
<script type="text/javascript" src="js/jquery.tap.js" ></script>
<title></title>
<style type="text/css">
div{
width: 300px;
height: 300px;
background: red;
}
</style>
<script type="text/javascript">
$(function(){
$("div").on('click',function(){
console.log(1);
});
});
$(function(){
$("div").on('tap',function(){
console.log(2);
return false;
});
});
</script>
</head>
<body>
<div></div>
</body>
</html>