touch插件
第一种:
<script>
(
function
($) {
var
options, Events, Touch;
options = {
x: 20,
y: 20
};
Events = [
'swipe'
,
'swipeLeft'
,
'swipeRight'
,
'swipeUp'
,
'swipeDown'
,
'tap'
,
'longTap'
,
'drag'
];
Events.forEach(
function
(eventName) {
$.fn[eventName] =
function
() {
var
touch =
new
Touch($(
this
), eventName);
touch.start();
if
(arguments[1]) {
options = arguments[1]
}
return
this
.on(eventName, arguments[0])
}
});
Touch =
function
() {
var
status, ts, tm, te;
this
.target = arguments[0];
this
.e = arguments[1]
};
Touch.prototype.framework =
function
(e) {
e.preventDefault();
var
events;
if
(e.changedTouches) events = e.changedTouches[0];
else
events = e.originalEvent.touches[0];
return
events
};
Touch.prototype.start =
function
() {
var
self =
this
;
self.target.on(
"touchstart"
,
function
(event) {
event.preventDefault();
var
temp = self.framework(event);
var
d =
new
Date();
self.ts = {
x: temp.pageX,
y: temp.pageY,
d: d.getTime()
}
});
self.target.on(
"touchmove"
,
function
(event) {
event.preventDefault();
var
temp = self.framework(event);
var
d =
new
Date();
self.tm = {
x: temp.pageX,
y: temp.pageY
};
if
(self.e ==
"drag"
) {
self.target.trigger(self.e, self.tm);
return
}
});
self.target.on(
"touchend"
,
function
(event) {
event.preventDefault();
var
d =
new
Date();
if
(!self.tm) {
self.tm = self.ts
}
self.te = {
x: self.tm.x - self.ts.x,
y: self.tm.y - self.ts.y,
d: (d - self.ts.d)
};
self.tm = undefined;
self.factory()
})
};
Touch.prototype.factory =
function
() {
var
x = Math.abs(
this
.te.x);
var
y = Math.abs(
this
.te.y);
var
t =
this
.te.d;
var
s =
this
.status;
if
(x < 5 && y < 5) {
if
(t < 300) {
s =
"tap"
}
else
{
s =
"longTap"
}
}
else
if
(x < options.x && y > options.y) {
if
(t < 250) {
if
(
this
.te.y > 0) {
s =
"swipeDown"
}
else
{
s =
"swipeUp"
}
}
else
{
s =
"swipe"
}
}
else
if
(y < options.y && x > options.x) {
if
(t < 250) {
if
(
this
.te.x > 0) {
s =
"swipeLeft"
}
else
{
s =
"swipeRight"
}
}
else
{
s =
"swipe"
}
}
if
(s ==
this
.e) {
this
.target.trigger(
this
.e);
return
}
}
})(window.jQuery || window.Zepto);
</script>
<script>
;(
function
(a){
a.fn.touchwipe=
function
(c){
var
b={
drag:
false
,
min_move_x:20,
min_move_y:20,
wipeLeft:
function
(){
/*向左滑动*/
},
wipeRight:
function
(){
/*向右滑动*/
},
wipeUp:
function
(){
/*向上滑动*/
},
wipeDown:
function
(){
/*向下滑动*/
},
wipe:
function
(){
/*点击*/
},
wipehold:
function
(){
/*触摸保持*/
},
wipeDrag:
function
(x,y){
/*拖动*/
},
preventDefaultEvents:
true
};
if
(c){a.extend(b,c)};
this
.each(
function
(){
var
h,g,j=
false
,i=
false
,e;
var
supportTouch =
"ontouchstart"
in
document.documentElement;
var
moveEvent = supportTouch ?
"touchmove"
:
"mousemove"
,
startEvent = supportTouch ?
"touchstart"
:
"mousedown"
,
endEvent = supportTouch ?
"touchend"
:
"mouseup"
/* 移除 touchmove 监听 */
function
m(){
this
.removeEventListener(moveEvent,d);
h=
null
;
j=
false
;
clearTimeout(e)
};
/* 事件处理方法 */
function
d(q){
if
(b.preventDefaultEvents){
q.preventDefault()
};
if
(j){
var
n = supportTouch ? q.touches[0].pageX : q.pageX;
var
r = supportTouch ? q.touches[0].pageY : q.pageY;
var
p = h-n;
var
o = g-r;
if
(b.drag){
h = n;
g = r;
clearTimeout(e);
b.wipeDrag(p,o);
}
else
{
if
(Math.abs(p)>=b.min_move_x){
m();
if
(p>0){b.wipeLeft()}
else
{b.wipeRight()}
}
else
{
if
(Math.abs(o)>=b.min_move_y){
m();
if
(o>0){b.wipeUp()}
else
{b.wipeDown()}
}
}
}
}
};
/*wipe 处理方法*/
function
k(){clearTimeout(e);
if
(!i&&j){b.wipe()};i=
false
;j=
false
;};
/*wipehold 处理方法*/
function
l(){i=
true
;b.wipehold()};
function
f(n){
//if(n.touches.length==1){
h = supportTouch ? n.touches[0].pageX : n.pageX;
g = supportTouch ? n.touches[0].pageY : n.pageY;
j=
true
;
this
.addEventListener(moveEvent,d,
false
);
e=setTimeout(l,750)
//}
};
//if("ontouchstart"in document.documentElement){
this
.addEventListener(startEvent,f,
false
);
this
.addEventListener(endEvent,k,
false
)
//}
});
return
this
};
})(jQuery);
/*
调用
*/
$(
"#aa"
).touchwipe({
wipeLeft:
function
(){ alert(
"向左滑动了"
)},
wipeRight:
function
(){alert(
"向右滑动了"
)},
})
</script>
<script>
/**
* jQuery Plugin to obtain touch gestures
* @author Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
* @version 1.1.1 (9th December 2010)
*/
;(
function
($, undefined){
$.fn.touchwipe =
function
(settings) {
var
config = {
min_move_x: 50,
min_move_y: 20,
wipeLeft:
function
() { },
wipeRight:
function
() { },
preventDefaultEvents:
false
};
if
(settings) $.extend(config, settings);
this
.each(
function
() {
var
startX;
var
startY;
var
isMoving =
false
;
var
directionLocked =
null
;
function
cancelTouch() {
this
.removeEventListener(
'touchmove'
, onTouchMove);
startX =
null
;
isMoving =
false
;
directionLocked =
false
;
}
function
onTouchMove(e) {
if
(config.preventDefaultEvents) {
e.preventDefault();
}
if
(isMoving) {
var
x = e.changedTouches ? e.changedTouches[0].clientX: e.clientX;
var
y = e.changedTouches ? e.changedTouches[0].clientY: e.clientY;
var
dx = startX - x;
var
dy = startY - y;
var
absDistX = Math.abs(dx);
var
absDistY = Math.abs(dy);
if
(directionLocked ===
"y"
) {
return
}
else
{
if
(directionLocked ===
"x"
) {
e.preventDefault()
}
else
{
absDistX = Math.abs(dx);
absDistY = Math.abs(dy);
if
(absDistX < 4) {
return
}
if
(absDistY > absDistX ) {
dx = 0;
directionLocked =
"y"
;
return
}
else
{
e.preventDefault();
directionLocked =
"x"
}
}
}
if
(absDistX >= config.min_move_x) {
cancelTouch();
if
(dx > 0) {
config.wipeLeft();
}
else
{
config.wipeRight();
}
}
}
}
function
onTouchStart(e)
{
if
(e.touches.length == 1) {
startX = e.changedTouches ? e.changedTouches[0].clientX: e.clientX;
startY = e.changedTouches ? e.changedTouches[0].clientY: e.clientY;
isMoving =
true
;
directionLocked =
false
;
this
.addEventListener(
'touchmove'
, onTouchMove,
false
);
}
}
if
(
'ontouchstart'
in
document.documentElement) {
this
.addEventListener(
'touchstart'
, onTouchStart,
false
);
}
});
return
this
;
};
})(jQuery);
<br><br>
touch插件的更多相关文章
- 移动端续讲及zepto移动端插件外加touch插件介绍
媒体查询:针对不同设备,显示不同的样式. 设备像素比:dpr device-piexl-ratio 在he开发中,要一个3陪高清图片: 1080>=320*3 (主要是为了解决图片的失真问题) ...
- 移动端 (基于jquery的3个)touch插件
//第一个 Author: Alone Antroduction: 高级前端开发工程师 Sign: 人生没有失败,只有没到的成功. //依赖jQuery 或者Zepto <script> ...
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...
- 插件-3D轮播图
先上效果图 查看实例点击 这里 这个栗子中,可以选择展示 5 张 或者展示 3 张,即使是只有一个slide,也可以完成布局,正常轮播,麻麻再也不用怕只有4个slid而不能用这种轮播啦! 本栗实现原 ...
- Easy Touch 摇感控制人物移动
Easy Touch 摇感控制人物移动 public class joystick : MonoBehaviour { public float Speed; //定义速度 p ...
- Unity手游之路游戏摇杆之Easy Touch 3教程
之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...
- [Phonegap+Sencha Touch] 移动开发72 List列表横向滑动操作(仿QQ列表滑动删除)
原文链接:http://blog.csdn.net/lovelyelfpop/article/details/50425744 本插件有2个版本号:sencha touch 版本号和 extjs6 m ...
- mobile web HTML5 app曾经的踩过坑(转)
兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是 ...
- mobile web曾经的踩过坑
兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是 ...
随机推荐
- javascript总结25:Array的5中迭代方法: every(), filter() , forEach() map() some()
1 Array常用的操作方法: 1 操作方法 - concat() //把参数拼接到当前数组 -slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开 ...
- java Random类和Math.Rondom
Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取 ...
- 设计模式7---Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...
- freemarker基本入门教程
copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...
- cxgrid列高度行宽度定义
行高度定义 TableView->OptionView->dataRowHieght 即可设置行高度 自动调整行宽 1.选中cxgridview,在属性中找OptionsView---& ...
- Delphi 调试连接 任意Android手机/平板/盒子(要安装Google USB Driver,并且还有USB的相关许多文章)
Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...
- duilib入门简明教程 -- 界面设计器 DuiDesigner (10)
上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便. 所以这一章准备介绍duilib的UI设计器,由于这个设计器很不 ...
- python版本selenium定位方式(不止八种哦)
除了大家熟知的8种定位方式之外 1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class ...
- Split 之特殊用法
java中split()特殊符号"." "|" "*" "\" "]" 关于点的问题是用stri ...
- Python【读取文件,第一行与最后一行】
文件小的读取方法 with open("a1.txt","r",encoding="gbk") as f: r = f.readlines( ...