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系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是 ...
随机推荐
- centos7用fdisk进行分区
1.查看分区信息:fdisk -l 从上面可以看到,/dev/sdb分区还没有使用,现在将其划分成2个10G的分区. 2.执行:fdisk /dev/sdb 1):fdisk命令参数 p:打印分区表. ...
- 42 :809*x=800*x+9*x+1
题目:809*x=800*x+9*x+1(去掉最后的1有解)其中x代表的两位数,8*x的结果为两位数,9*x的结果为3位数.求x代表的两位数,及809*x后的结果(两种方法实现) public cla ...
- “hdfs dfs -ls”命令的使用
"hdfs dfs -ls"带一个参数,如果参数以"hdfs://URI"打头表示访问HDFS,否则相当于ls. 其中URI为NameNode的IP或主机名,可 ...
- 一篇文章让你快速入门 学懂Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- struts2使用验证文件实现校验
原创 struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中. 验证文件的命名规则 一般情况下,验证文件的命名规则是:Action类名-validation.xml. ...
- Java文件路径
几大常用的方法 Class.getResource("") 返回的是当前Class这个类所在包开始的位置 getClassLoader().getResource(" ...
- Windows下Mongodb安装及配置(转载)
转载(https://blog.csdn.net/liang377122210/article/details/79062681) MongoDB的安装很简单,设置好安装路径后,一直Next直到安装结 ...
- mybatis mybatis.xml 文件和properties文件结合来进行配置数据源
- touch和click优先性
jQuery的touch事件是当用户触摸事件(页面)时触发的. jQuery的click事件是当用户点击元素时触发的. 而事件执行流程是手指点击一个元素,会经过:touchstart --> t ...
- tensorflow使用
近期在工作中使用tensorflow训练神经网络模型,使用方法简要记录. 环境配置