原文地址http://blog.csdn.net/pvfhv/article/details/3449803/#

源码:

(function($) {
var old = $.fn.swipe; $.fn.swipe = function(option) {
var opt = {
'left': $.noop,
'right': $.noop,
'up': $.noop,
'down': $.noop
}; if ($.type(option) == 'string') {
switch (option.toLowerCase()) {
case 'left':
if (this.data('opt').left && $.isFunction(this.data('opt').left)) {
this.data('opt').left.call(this);
}
break;
case 'right':
if (this.data('opt').right && $.isFunction(this.data('opt').right)) {
this.data('opt').right.call(this);
}
break;
case 'up':
if (this.data('opt').up && $.isFunction(this.data('opt').up)) {
this.data('opt').up.call(this);
}
break;
case 'down':
if (this.data('opt').down && $.isFunction(this.data('opt').down)) {
this.data('opt').down.call(this);
}
break;
default:
break;
} return this;
} else if ($.isPlainObject(option)) {
var clone = {}; //大小写不敏感处理
$.each(option, function(k, v) {
clone[k.toLowerCase()] = v;
}); $.extend(opt, clone); return this.each(function(index, ele) {
//敏感距离
var dis = 120;
//各元素赋值,备直接触发时用
$(ele).data('opt', $.extend({}, opt)).on('touchstart mousedown',function(e){
var ev=e.type=='touchstart'?e.originalEvent.touches[0]:e,
startX = ev.pageX,
startY = ev.pageY,
startLeft = $(this).position().left,
startTop = $(this).position().top,
start = {
left: startLeft,
top: startTop
},
disX = startX - startLeft,
disY = startY - startTop; $(document).on('touchmove.swipe.founder mousemove.swipe.founder',function(e){
var ev=e.type=='touchmove'?e.originalEvent.touches[0]:e; if (opt.left != $.noop || opt.right != $.noop) {
$(ele).css('left', ev.pageX - disX - $(ele).offsetParent().offset().left + 'px');
} if (opt.up != $.noop || opt.down != $.noop) {
$(ele).css('top', ev.pageY - disY - $(ele).offsetParent().offset().top + 'px');
} e.preventDefault();
}); $(document).on('touchend.swipe.founder mouseup.swipe.founder',function(e){
var ev=e.type=='touchend'?e.originalEvent.changedTouches[0]:e,
endX = ev.pageX,
endY = ev.pageY,
x = Math.abs(endX - startX),
y = Math.abs(endY - startY),
direction = null; //必须在指定dis大小外,消除敏感距离
direction = x >= y ? (endX < startX ? (Math.abs(endX - startX) > dis ? 'left' : null) : (Math.abs(endX - startX) > dis ? 'right' : null)) : (endY < startY ? (Math.abs(endY - startY) > dis ? 'up' : null) : (Math.abs(endY - startY) > dis ? 'down' : null)); switch (direction) {
case 'left':
if (opt.left && $.isFunction(opt.left)) {
opt.left.call(ele);
}
break;
case 'right':
if (opt.right && $.isFunction(opt.right)) {
opt.right.call(ele);
}
break;
case 'up':
if (opt.up && $.isFunction(opt.up)) {
opt.up.call(ele);
}
break;
case 'down':
if (opt.down && $.isFunction(opt.down)) {
opt.down.call(ele);
}
break;
default:
//复位
$(ele).animate({
'left': start.left + 'px',
'top': start.top + 'px'
});
break;
} $(document).off('.swipe.founder');
});
});
});
} else {
throw new Error('%E5%8F%82%E6%95%B0%E9%94%99%E8%AF%AF!');
}
}; $.fn.swipe.noConflict = function() {
$.fn.swipe = old;
return this;
};
})(jQuery);

案例:

<!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<title>手势+鼠标</title>
<style type="text/css">
#div1 {
text-align: center;
width: 100px;
height: 100px;
line-height: 100px;
background: yellow;
position: absolute;
left: 50%;
top: 50%;
}
</style>
</head> <body>
<div id="div1"></div>
<script src="../js/jquery-2.1.1.js" type="text/javascript" charset="utf-8"></script>
<script src="jquery.swipe.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$('#div1').swipe({
left: function(){
$(this).text('向左运动');
},
right: function(){
$(this).text('向右运动');
},
up: function(){
$(this).text('向上运动');
},
down: function(){
$(this).text('向下运动');
}
});
</script>
</body> </html>

【转载】移动开发中的上下左右滑动插件jquery.swipe.js的更多相关文章

  1. 网站开发中很实用的 HTML5 & jQuery 插件

    这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...

  2. 基于jQuery开发的手风琴插件 jquery.accordion.js

     1.插件代码 少说多做,基于jQuery的手风琴插件jquery.accordion.js的代码:  /* * 手风琴插件说明: * 1.treeTrunk对应树干 * 2.treeLeaf对应树叶 ...

  3. jQuery响应式幻灯片插件jquery.glide.js(支持触摸&轻量级)

    找到一款好的幻灯片插件不容易,找到一款功能全并且使用很简单的幻灯片更不容易,今天为大家分享一款全能的幻灯片插件glide.js,也是我现在在使用的一款插件. jquery.glide.js是响应和触摸 ...

  4. jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...

  5. jQuery插件 -- 表单验证插件jquery.validate.js, jquery.metadata.js

    原文地址:http://blog.csdn.net/zzq58157383/article/details/7718352   最常使用JavaScript的场合就是表单的验证,而jQuery作为一个 ...

  6. jQuery滚动条插件 – jquery.slimscroll.js

    jquery.slimscroll.js插件是一个支持把内容放在一个盒子里面,固定一个高度,超出的则使用滚动.jquery.slimscroll.js不仅可以定义高度.宽度,还可以定义位置.滚动条大小 ...

  7. 会跳高的字体插件jquery.beattext.js

    插件描述:字体特效,会弹跳的字体插件jquery.beattext.js,兼容性如下: 使用方法 导入如下3个js文件: <script type="text/javascript&q ...

  8. jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明

    jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明 jquery.lazyload.js是一个用JavaScript编写的jQuery插件.它可以延迟加载长页面中的图片 ...

  9. jQuery懒加载插件jquery.lazyload.js使用说明实例

    jQuery懒加载插件jquery.lazyload.js使用说明实例很多网站都会用到‘图片懒加载’这种方式对网站进行优化,即延迟加载图片或符合某些条件才开始加载图片.懒加载原理:浏览器会自动对页面中 ...

随机推荐

  1. 【BZOJ1758】【WC2010】重建计划(点分治,单调队列)

    [BZOJ1758][WC2010]重建计划(点分治,单调队列) 题面 BZOJ 洛谷 Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表 ...

  2. 使用SetupDI* API列举系统中的设备

    原文链接地址:https://blog.csdn.net/clteng/article/details/801012?utm_source=blogxgwz8 在Windows系统中提供一组有用的函数 ...

  3. nginx php fastcgi Connection reset by peer的原因及解决办法

    Connection reset by peer 这个错误是在nginx的错误日志中发现的,为了更全面的掌握nginx运行的异常,强烈建议在nginx的全局配置中增加 error_log   logs ...

  4. hiho 1044 : 状态压缩

    #1044 : 状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车 ...

  5. 把一个文件中所有文件名或者文件路径读取到一个txt文件,然后在matlab中读取

    链接: http://blog.csdn.net/dreamgchuan/article/details/51113295 dir /on/b/s  这个读取的是这样的格式:

  6. Covariance 协方差分析

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  7. Hbuider制作app升级包的简单办法 (升级官方提供的案例)

    源文档:http://ask.dcloud.net.cn/question/11795 http://ask.dcloud.net.cn/article/199 一.生成移动App资源升级包 5+应用 ...

  8. CSS3笔记-加强版

    属性选择器:   E[attr]只使用属性名,但没有确定任何属性值 E[attr="value"]指定属性名,并指定了该属性的属性值 E[attr~="value&quo ...

  9. 莫队 Codeforces Round #340 (Div. 2) E

    题目大意:给你一个长度为n的序列,有m个询问,每次询问一个区间[L,R],表示这个区间内,有多少的a[i]^a[i+1].....^a[j]=k. 思路:莫队去搞就好了 我们定义pre[i]=a[1] ...

  10. CF745 D 交互题 思维 二进制分解

    现有一矩阵你可以做出不超过20个询问 每个询问 要求输入列号,可以询问矩阵上每行上你给的列之中的最小值让你最后输出该矩阵每行的不包括对角线位置上的最小值考虑询问如何分组,考虑二分,以二进制位来分组 那 ...