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 concat数组累加 示例
Sep 03 Javascript
jQuery(非HTML5)可编辑表格实现代码
Dec 11 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
Bootstrap 附加导航(Affix)插件实例详解
Jun 01 Javascript
如何解决hover在ie6中的兼容性问题
Dec 15 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
JavaScript命名空间模式实例详解
Jun 20 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的分页功能
2007/03/21 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
php封装的page分页类完整实例
2016/10/18 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
PHP时间类完整代码实例
2021/02/26 PHP
使用正则替换变量
2007/05/05 Javascript
javascript 写类方式之八
2009/07/05 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
javascript闭包入门示例
2014/04/30 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python中文件操作简明介绍
2015/04/13 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
求职信范文英文版
2014/01/05 职场文书
投资意向书范本
2014/04/01 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技