手机端的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 ...
随机推荐
- iOS开发多线程篇—NSOperation简单介绍
iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现 ...
- PHPCMS出错Call to undefined function sitename()
一站点使用PHPCMS V9.4.2,因很久未升级,在使用后台的在线升级,升级到9.5.4后,出现“Call to undefined function sitename()”错误(注原模板未升级), ...
- js中的offsetWidth岁的BUG
---恢复内容开始--- 在js使用offsetWidth来操作控件的运动是会遇到: var oDiv = document.getElementById('div1') oDiv.style.wid ...
- SQL2008无法启动,报错"17051
解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进入产品密钥,输入密钥 Developer: PTTFM-X467G-P7RH2-3Q6C ...
- ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于 ...
- UWP/Win10新特性系列—App Service
Win10中,新增了一个很实用的新特性叫做App Service,App Service允许App不在前台运行的情况下提供出一个或多个对外服务供其他App使用,这看起来就好像Web开发中的Web Ap ...
- vmware12用 unlocker206能不能解锁 OS X系统
先下载UnLocker2061.zip 2. 选择虚拟机右键--> 属性 3.将下载的unlocker2061解压后文件放入VMware安装目录下 选择win-install.cmd文件 右 ...
- WOJ-1203
Description 有一组数,很多很多个数,里面有一个数出现了超过一半次,请你把它找出来 Input 先是一个N (N<=1000000),然后接下来一行N个数,请一直处理到EOF. Out ...
- Smarty 分页
1 <div id="pagelist" class="clearfix">2 <a href="/canadian-sai ...
- android之 listview加载性能优化ViewHolder
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候, ...