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获取地址栏参数插件(模仿C#)
Oct 26 Javascript
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
jQuery判断元素是否是隐藏的代码
Apr 24 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
Sep 05 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
深入理解 Koa 框架中间件原理
Oct 18 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
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读取数据库信息的几种方法
2008/05/24 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
Js组件的一些写法
2010/09/10 Javascript
Js基础学习资料
2010/11/23 Javascript
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
python实时监控cpu小工具
2018/06/21 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python:slice与indices的用法
2019/11/25 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
python Tornado框架的使用示例
2020/10/19 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
国贸专业毕业求职信
2014/06/11 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
Python爬虫基础初探selenium
2021/05/31 Python