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 私有成员分析
Jan 13 Javascript
妙用Jquery的val()方法
Jun 27 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
Jan 26 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
处理JavaScript值为undefined的7个小技巧
Jul 28 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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返回字符串中所有单词的方法
2015/03/09 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python实现中文转换url编码的方法
2016/06/14 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
给同学的道歉信
2014/01/16 职场文书
初一生物教学反思
2014/01/18 职场文书
新学期教师寄语
2014/04/02 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
乐山大佛导游词
2015/02/02 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
义卖募捐活动总结
2015/05/09 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
生死抉择观后感
2015/06/09 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫