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 相关文章推荐
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 Javascript
JS图片压缩(pc端和移动端都适用)
Jan 12 Javascript
Angular 2.x学习教程之结构指令详解
May 25 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
浅析is_writable的php实现
2013/06/18 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
php工具型代码之印章抠图
2018/07/18 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
datagrid框架的删除添加与修改
2013/04/08 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python监控文件或目录变化
2016/06/07 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
python中数字是否为可变类型
2020/07/08 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python