jQuery实现拖拽效果插件的方法


Posted in Javascript onMarch 23, 2015

本文实例讲述了jQuery实现拖拽效果插件的方法。分享给大家供大家参考。具体如下:

下面的jQuery插件允许你通过鼠标右键点击拖动overflow的元素,这个插件可以在移动设备上运行

/**
* jQuery Drag and Scroll
*
* Copyright (c) 2012 Ryan Naddy (ryannaddy.com)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function($){
  var down = false;
  var prevX = 0;
  var prevY = 0;
  var x = 0;
  var y = 0;
  var px = 0;
  var py = 0;
  var lastPX = -1;
  var lastPY = -1;
  var $target = null;
  var $me = null;
  var $selector = "";
  var settings = {
    mouseButton: 3,
    context: false,
    selectText: false
  };
  $.fn.dragScroll = function(options){
    settings = $.extend(settings, options);
    $selector = $(this).selector;
    $(this).contextmenu(function(){
      return false;
    }).bind("mousedown touchstart", function(e){
      $me = $(this);
      e = event.touches ? event.touches[0] : e;
      $target = $(e.target);
      $target = $target.closest($selector);
      if(settings.viewPort){
        if(!settings.context){
          $me.contextmenu(function(){
            return false;
          });
        }
      }
      if(!settings.selectText){
        $me.attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false);
      }
      $me = $me.closest($selector);
      if($target && $me.attr("id") != $target.attr("id")){
        return false;
      }
      if(e.which == settings.mouseButton || event.touches){
        $me.css("cursor", "move");
        down = true;
      }
      px = $me.scrollLeft();
      py = $me.scrollTop();
      x = px + e.pageX;
      y = py + e.pageY;
      prevX = x;
      prevY = y;
      return true;
    }).bind("mouseup touchend", function(e){
      $me = $(this);
      e = event.touches ? event.touches[0] : e;
      $me.css("cursor", "auto");
      down = false;
    }).bind("mousemove touchmove", function(e){
      $me = $(this);
      $me = $me.closest($selector);
      e = event.touches ? event.touches[0] : e;
      if((e.which == settings.mouseButton || event.touches) && down){
        if(event.touches){
          event.preventDefault();
        }
        if($target && $me.attr("id") != $target.attr("id")){
          return false;
        }
        $me.css("cursor", "move");
        px = $me.scrollLeft();
        py = $me.scrollTop();
        x = px + e.pageX;
        y = py + e.pageY;
        $me.scrollLeft(px + (-(x - prevX)));
        $me.scrollTop(py + (-(y - prevY)));
        prevX = x - (x - prevX);
        prevY = y - (y - prevY);
        if(lastPX == px)
          prevX = x;
        if(lastPY == py)
          prevY = y;
        lastPX = px;
        lastPY = py;
      }
      return true;
    });
    return this;
  }
})(jQuery);

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
location.search在客户端获取Url参数的方法
Jun 08 Javascript
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
javascript setTimeout和setInterval计时的区别详解
Jun 21 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
c#程序员对TypeScript的认识过程
Jun 19 Javascript
jQuery基本选择器之标签名选择器
Sep 03 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 Javascript
JS document form表单元素操作完整示例
Jan 13 Javascript
jQuery操作表单常用控件方法小结
Mar 23 #Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 #Javascript
JavaScript中匿名函数用法实例
Mar 23 #Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 #Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 #Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 #Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 #Javascript
You might like
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python编写Logistic逻辑回归
2020/12/30 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
python中append函数用法讲解
2020/12/11 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
十佳班主任事迹材料
2014/01/18 职场文书
自荐信格式简述
2014/01/25 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
研究生求职自荐书
2014/06/23 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
vue实现滑动解锁功能
2022/03/03 Vue.js