[jQuery] 터치 이벤트 플러그인
- Nest
- Development
- Category
- Javascript
- Hit
- 1038
- Star
- 6
- 이것은 모바일 기기에서 터치를 통해서 기능을 실행하면 반응이 느려서 제작하게된 터치시작,터치이동,터치상태에서 손을 뗀 동작을 실행할 수 있는 jQuery plugin이다.
- 사용조건 : jQuery가 로드되어 있어야하고, 모바일 환경에서는 터치기능이 작동하지만 PC환경에서는 클릭기능만 작동한다.
- 이것을 만든 이유는 모바일에서 <a/>태그를 사용하여 그 영역에 터치를 하면 0.5초 이상의 딜레이가 나타난다. 다른 모바일 UI가 터치에 반응이 빠른 이유는 자바스크립트의 window.Touch객체를 사용하기 때문에 빠르다는걸 알게되어 만들었다.
- 모바일 사이트를 염두하는 프로젝트라면 상당히 쓸만한 플러그인이라고 생각한다. 단순히 터치하여 페이지를 넘기는 용도로 사용하는것이 아닌 터치를 통하여 빠른 반응을 가진 이벤트를 만들고자 하였다.
Source
;(function($){
// 화면에 누르고나서 이동하지 않고 화면에서 떼면 complete메서드가 실행된다.
$.fn.tabClick = function(options)
{
var
$this = $(this)
,$defaults = {
touchStart : function($this) {},
touchMove : function($this) {},
touchEnd : function($this) {}
}
,$opts = $.extend($defaults, options)
,$move
,is_touch_device = function()
{
return !!('ontouchstart' in window) // works on most browsers
|| !!('onmsgesturechange' in window && window.navigator.msMaxTouchPoints); // works on ie10
}
,_init = function()
{
if (window.Touch) {
$this.bind('touchstart', onTouchStart);
$this.bind('touchmove', onTouchMove);
$this.bind('touchend', onTouchEnd);
} else {
$this.bind('click', function(){
$opts.touchEnd($(this));
return false;
});
}
}
;
function onTouchStart()
{
$move = false;
$opts.touchStart($(this));
}
function onTouchMove()
{
$move = true;
$opts.touchMove($(this));
}
function onTouchEnd()
{
if (!$move) {
$opts.touchEnd($(this));
return false;
}
}
_init();
}
})(jQuery);
사용방법
$('a').tabClick({
touchStart : function()
{
console.log('영역에 손을대면 실행');
}
,touchMove : function()
{
console.log('영역에 손을 댄 상태에서 이동할때마다 실행');
}
,touchEnd : function()
{
console.log('화면에서 손을 떼면실행');
}
});
touchStart, touchMove, touchEnd 세 메서드를 전부 넣을 필요없으며 한개만 넣어도 된다.
$('a').tabClick({
touchEnd : function()
{
console.log('Click'); // 클릭 이벤트가 실행된다.
}
});