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 相关文章推荐
jQuery Ajax 全解析
Feb 08 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
Jan 04 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
如何在微信小程序中实现Mixins方案
Jun 20 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
js实现百度登录窗口拖拽效果
Mar 19 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中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
python二叉树的实现实例
2013/11/21 Python
python列表操作实例
2015/01/14 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
Python如何实现强制数据类型转换
2019/11/22 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
大学生村官心得体会范文
2014/01/04 职场文书
怎样写演讲稿
2014/01/04 职场文书
创建青年文明号材料
2014/05/09 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
法律意见书范文
2015/06/04 职场文书
PHP基本语法
2021/03/31 PHP
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android