自定义触摸屏的事件种
发布时间:2010-05-30 05:29:12 文章来源:www.iduyao.cn 采编人员:星星草
自定义触摸屏的事件类
(function($) {
$.fn.touchWizard = function(settings) {
var config = {
touchLeft: function(e) {
trace("touchLeft");
},
touchRight: function(e) {
trace("touchRight:" + e.value);
},
touchUp: function(e) {
trace("touchUp:" + e.value);
},
touchDown: function(e) {
trace("touchDown:" + e.value);
},
touchDrag: function(e) {
},
zoom: function(e) {
trace("zoom:" + e.value);
},
dblclick: function(e) {
trace("dblclick");
},
mouseScroll: function(e) {
trace("mouseScroll:" + e.value);
},
preventDefaultEvents: true
};
if (settings) $.extend(config, settings);
this.each(function() {
var min_move_x = 20;
var min_move_y = 20 ;
var clickTime = new Date() ;
var dblInterval = 300 ;
var isScale = false ;
//计算两点间的距离
function getPointDistance(x1,y1,x2,y2)
{
return Math.round(Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2))) ;
}
function onTouchStart(e) {
if (e.touches.length > 1)
return ;
isScale = false ;
//dblclick
var nowTime = new Date() ;
var t = parseInt(nowTime.getTime() - clickTime.getTime()) ;
if ((t < dblInterval) && (e.touches.length == 1))
{
config.dblclick(e) ;
return ;
}
clickTime = nowTime ;
var touches = e.changedTouches ;
for (var i=0; i < touches.length; i++) {
var touch = touches[i] ;
touch.startX = touch.clientX;
touch.startY = touch.clientY;
}
e.stopPropagation();
}
function onTouchMove(e) {
}
function onTouchEnd(e) {
if (isScale)
return ;
var touch = e.changedTouches[0] ;
touch.endX = touch.clientX ;
touch.endY = touch.clientY ;
var dx = touch.startX - touch.endX;
var dy = touch.startY - touch.endY;
if((Math.abs(dx) >= min_move_x) && (Math.abs(dx)>Math.abs(dy))) {
e.value = dx ;
if(dx > 0)
config.touchRight(e);
else
config.touchLeft(e);
}
else if((Math.abs(dy) >= min_move_y) && (Math.abs(dx)<Math.abs(dy))) {
e.value = dy ;
if(dy > 0)
config.touchDown(e);
else
config.touchUp(e);
}
e.stopPropagation();
}
function onGestureStart(e){
isScale = true ;
e.stopPropagation();
}
function onGestureEnd(e){
e.value = e.scale ;
config.zoom(e);
e.stopPropagation();
}
function onMouseWheel(e)
{
var value = (/Firefox/i.test(navigator.userAgent))? e.detail : e.wheelDelta ;
e.value = value ;
config.mouseScroll(e);
e.stopPropagation();
}
//touchstart gesturestart touchstart gestureend touchend touchend
this.addEventListener("touchstart", onTouchStart, false);
this.addEventListener("touchmove", onTouchMove, false);
this.addEventListener("touchend", onTouchEnd, false);
this.addEventListener("gesturestart", onGestureStart, false);
this.addEventListener("gestureend", onGestureEnd, false);
this.addEventListener((/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel", onMouseWheel, false);
});
return this;
};
})(jQuery);
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
【IOS】高仿糗事百科客户端(基本实现了除注册,评论之外的功能)
【原创作品, 欢迎转载,转载请在明显处注明! 谢谢。
原文地址:h...
-
数独游戏(1)之绘制九宫格,并初始化数据
<数独游戏>之绘制九宫格,并初始化数据
1.在工程里的res/values目录下新建一个colors....
-
关于listview的setAdapter和notifyDataSetChanged
做了个需要更新listview的项目,在listview更新时遇到问题,抓耳挠腮半天仍未能解...
-
最完整的让cocos2d游戏适配IPAD Retina的教程
暂时在网上还没找到一个让cocos2d开发的IPhone游戏快速地适应IPAD2 Retina模式的教...
-
使用ContentObserver监听ContentProvider中数据的变化
如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,...
-
Andriod 实现可拖动列表
在做一个应用时,有一个需求,需要实现像iphone天气的城市列表界面的可拖动功能。其实android已...
-
类似APP大厅程序的实现
由于Android可以按照一定的规则,启动另外一个应用程序的Activity,并可以传递一些数据,因此下面的需求,在原则...
-
编写小程序查看CSDN博客信息(ASIHTTPRequest+TFHpple)
作为一个iOS练习,使用ASIHTTPRequest+TFHpple写了个小程序读取CSDN博客...
-
Objective-C中nil与release的区别与用法
做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露...
-
联想抗衡苹果之路:用苹果的方式打败苹果?
联想教父柳传志说过,联想历史上曾经历三次生死危机,但都死里逃生,并一次次验证着“大难不...