【转载】移动开发中的上下左右滑动插件jquery.swipe.js
原文地址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的更多相关文章
- 网站开发中很实用的 HTML5 & jQuery 插件
		这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ... 
- 基于jQuery开发的手风琴插件 jquery.accordion.js
		1.插件代码 少说多做,基于jQuery的手风琴插件jquery.accordion.js的代码: /* * 手风琴插件说明: * 1.treeTrunk对应树干 * 2.treeLeaf对应树叶 ... 
- jQuery响应式幻灯片插件jquery.glide.js(支持触摸&轻量级)
		找到一款好的幻灯片插件不容易,找到一款功能全并且使用很简单的幻灯片更不容易,今天为大家分享一款全能的幻灯片插件glide.js,也是我现在在使用的一款插件. jquery.glide.js是响应和触摸 ... 
- jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)
		该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ... 
- jQuery插件 -- 表单验证插件jquery.validate.js, jquery.metadata.js
		原文地址:http://blog.csdn.net/zzq58157383/article/details/7718352 最常使用JavaScript的场合就是表单的验证,而jQuery作为一个 ... 
- jQuery滚动条插件 – jquery.slimscroll.js
		jquery.slimscroll.js插件是一个支持把内容放在一个盒子里面,固定一个高度,超出的则使用滚动.jquery.slimscroll.js不仅可以定义高度.宽度,还可以定义位置.滚动条大小 ... 
- 会跳高的字体插件jquery.beattext.js
		插件描述:字体特效,会弹跳的字体插件jquery.beattext.js,兼容性如下: 使用方法 导入如下3个js文件: <script type="text/javascript&q ... 
- jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明
		jQuery图片懒加载插件jquery.lazyload.js使用实例注意事项说明 jquery.lazyload.js是一个用JavaScript编写的jQuery插件.它可以延迟加载长页面中的图片 ... 
- jQuery懒加载插件jquery.lazyload.js使用说明实例
		jQuery懒加载插件jquery.lazyload.js使用说明实例很多网站都会用到‘图片懒加载’这种方式对网站进行优化,即延迟加载图片或符合某些条件才开始加载图片.懒加载原理:浏览器会自动对页面中 ... 
随机推荐
- 【移动支付】.NET微信扫码支付接入(模式二-NATIVE)
			一.前言 经过两三天的琢磨总算完成了微信扫码支付功能,不得不感叹几句: 微信提供的DEMO不错,直接复制粘贴就可以跑起来了: 微信的配置平台我真是服了.公众平台.商户平台.开放平台,一个平 ... 
- Spark集群基础概念  与  spark架构原理
			一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ... 
- 【51nod1965】奇怪的式子
			Portal --> 51nod1965 Solution 怎么说呢..这题..做的有点痛苦.. 首先看这个式子长得..比较奇怪,指数里面那个加号有点烦人,而且这个函数不是一个积性函数也有点烦人 ... 
- 框架----Django框架(基础篇)
			一.基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: pyt ... 
- 使图片水平并垂直居中的一个Hack
			淘宝的一个前端面试题:使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中. 想起了vertical-align:middle;但是不行,后来才知道还要di ... 
- “Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常。-解决方法
			注释掉web/app.config中的: 
- Codeforces Round #301 (Div. 2)A B C D 水  模拟 bfs 概率dp
			A. Combination Lock time limit per test 2 seconds memory limit per test 256 megabytes input standard ... 
- @Springboot搭建项目controller层接收json格式的对象失败
			今天在使用swagger2测试的时候出错 1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说: ... 
- 「Python」7个不一样的代码写法
			打印index 对于一个列表,或者说一个序列我们经常需要打印它的index,一般传统的做法或者说比较low的写法: 更优雅的写法是多用enumerate 两个序列的循环 我们会经常对两个序列进行计算或 ... 
- 在Eclipse中开发使用Spring IOC的JUnit/TestNG测试用例之详解
			转载自:http://blog.csdn.net/radic_feng/article/details/6740438 我们期望能像在产品代码中一样,在测试用例中使用的bean也由Spring Con ... 
