手机端的click
一:click事件的封装
手机端的click事件不是太好用,
1.点击会有延迟,
2.会出现一个灰色区域
就想到了用touch事件代替.
touch事件有touchstart,touchmove,touchend.
在使用的时候会有这样的一种情况.
现在我想在一个元素上使用touch实现单击.
意思就是当我的手点下去,在抬起来后触发事件.
如果我绑定touchstart肯定是不行的:手还没抬起,就触发了事件.
如果绑定touchend.会有一些不友好的体验.
比如:我的手在元素上滑动,然后抬起,就会触发这个事件.
很明显有些时候我们只需要类似于单击事件.这种手滑动后不需要触发的事件.
下面这个代码就是一个移动端的click事件.
(function(){
$.fn.touchClick=function(callback){
this.each(function(){
var obj=$(this);
obj.on("touchstart",function(){
obj.data("move",false);
}).on("touchmove",function(){
obj.data("move",true);
}).on("touchend",function(event){
if(obj.data("move")){
return;
}else{
if(typeof callback==="function"){
callback(obj,event);
}
}
obj.data("move",false);
});
});
};
})(jQuery);
$("#div").touchClick(function(self,event){
self.hide();
});
二:移动端touch事件的跨页传递.
现在又A,B两个页面.上面各有一个元素#a,#b.在当前页面的同样位置.
$("#a").on("touchend",function(){
window.location.href="B.html";
});
$("#b").on("touchend",function(){
alert("B");
});
点击a之后直接跳转到B.html.但是诡异的是.触发了b元素的touch事件.
解决办法.
$("#a").on("touchend",function(){
window.location.href="B.html";
return false
});
click事件有三个过程.手按下,手滑动,手抬起.
重新封装touchclick,使其可以出发这三个事件:
(function(){
var defaults={
start:function(self,event){},
move:function(self,event){},
end:function(self,event){}
}
$.fn.touchClick1=function(opts){
opts=$.extend({}, defaults,opts);
this.each(function(){
var obj=$(this);
obj.on("touchstart",function(event){
obj.data("move",false);
return opts.start(obj,event);
}).on("touchmove",function(event){
obj.data("move",true);
return opts.move(obj,event);
}).on("touchend",function(event){
if(obj.data("move")){
return;
}else{
return opts.end(obj,event);
}
obj.data("move",false);
});
});
};
})(jQuery);
上面的写法有个弊端,每次想访问当前对象的都得使用self.不太好。如果直接用this不是更好么。改写上面的代码
(function(){
var defaults={
start:function(self,event){},
move:function(self,event){},
end:function(self,event){}
}
$.fn.touchClick=function(opts){
if(typeof opts=="function"){
opts=$.extend({}, defaults,{end:opts});
}else{
opts=$.extend({}, defaults,opts);
}
this.each(function(){
var obj=$(this);
obj.on("touchstart",function(event){
obj.data("move",false);
opts.start.call(this,event);
}).on("touchmove",function(event){
obj.data("move",true);
opts.move.call(this,event);
}).on("touchend",function(event){
if(obj.data("move")){
return;
}else{
opts.end.call(this,event);
}
obj.data("move",false);
});
});
};
})(jQuery);
手机端的click的更多相关文章
- h5手机端下拉选择城市
<!doctype html><html> <head> <meta http-equiv="Content-Type& ...
- js 判断pc端或手机端
<script> (function () { var navUA = navigator.userAgent; var defIncludeStr = "iPhone|Andr ...
- 手机端的tab切换,响应式切换效果
之前写过这些tab切换的效果,无论网页上还是手机端,网上也有很多的例子,这个好像是我参考网上,也不知道是哪里的了.总结了一下,就当保存下来了把. <!DOCTYPE html > < ...
- 手机端flex、字体设置、快速点击
;(function flexible (window, document) { var docEl = document.documentElement ♥1 var dpr = window.de ...
- h5 手机端适配问题汇总
1.uc手机浏览器竟然没有 sessionstorage 醉了 2.opera 浏览器 能识别 a标签中href的 javascript:; 为网址 , 55555 3.safari 的弹框如 ...
- XE5 Android 开发数据访问手机端[转]
把供手机端调用的web服务完成,接下来实现手机端调用webservices获取数据 1.新建firemonkey mobile application 2.选择blank application 3. ...
- 手机端图片预览和缩放js
转至:http://blog.sina.com.cn/s/blog_c342e3090102vcxu.html 1.手机端的图片选择和预览 <input type="file" ...
- HTML5手机端拍照上传
1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" captu ...
- 手机端网页返回顶部js代码
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...
随机推荐
- Winform TreeList递归绑定树节点
/// <summary> /// 绑定树目录 /// </summary> /// <param name="parentId">父ID< ...
- IntelliJ IDEA 使用总结
IntelliJ IDEA 使用总结 http://my.oschina.net/xianggao/blog/97539 IntelliJ IDEA 问题解决:1.乱码,主要是快捷键的字样显示乱码 中 ...
- DTO概念
在开发过程中用到了DTO,简单了解了一下. DTO:数据传输对象,用来连接表现层和应用层之间的数据交互.数据传输对象是没有行为的POJO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数 ...
- Android VideoView播放视频
今天介绍一下Android的视频播放控件VideoView,下面介绍一下VideoView的使用步骤: 1.在界面布局中定义VideoView组件,或者在程序中创建VideoView组件. 2.调用V ...
- OC之0801
1,字符串 字符串的创建:两种常用初始化方式 NSString *str=[[NSString alloc]initWithFormat:@"i am a boy"]; NSStr ...
- sqoop的merge和eval 工具
1.sqoop的merge的工具 sqoop merge 可以将hdfs上的两个文件进行合并,在increment import的过程中经常会用到,如incremenet import将数据导入到hd ...
- equals 与 ==
Object类中,方法equals():boolean equals(Object obj) { return this==obj;} == 比较两个变量的值是否相等,对于基本类型,==直接比较变 ...
- VC++ 文件系统
using namespace System; using namespace System::IO; void ShowHelpMsg(){ Console::WriteLine(L"本程 ...
- iOS 10 UserNotifications 框架解析
摘自:https://onevcat.com/2016/08/notification/ iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...
- ListView去除顶部和底部边缘阴影(亲测4.4及以前的版本都适用)
ListView滑动到顶部和底部时出现的阴影消除方法:android2.3以前用android:fadingEdge="none"android2.3以后用android:over ...