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类库D
Oct 24 Javascript
document.getElementById介绍
Sep 13 Javascript
js获取select标签的值且兼容IE与firefox
Dec 30 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
Mar 05 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
Jquery使用小技巧汇总
Dec 29 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
微信小程序通过js实现瀑布流布局详解
Aug 28 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
浅谈js原生拖放
2016/11/21 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
python万年历实现代码 含运行结果
2017/05/20 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Django中多种重定向方法使用详解
2019/07/17 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
毕业生就业推荐信范文
2013/12/01 职场文书
软件售后服务方案
2014/05/29 职场文书
学生干部培训方案
2014/06/12 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
Python中time标准库的使用教程
2022/04/13 Python