jquery实现拖动效果


Posted in Javascript onAugust 10, 2016

因为想实现相框的拖到,找了半天的原因愣是没有找到错误,所以,只能翻看源码了 

如何实现拖动效果?

 jquery实现拖动效果

jquery实现拖动效果

jquery实现拖动效果

首先分析下拖动效果原理:
1.当鼠标在被拖动对象上按下鼠标(触发onmousedown事件,且鼠标在对象上方)
2.开始移动鼠标(触发onmousemove事件)
3.移动时更显对象的top和left值
4.鼠标放开停止拖动(触发onmouseup事件)
注意:拖动的对象必须是定位对象(即设置了position:absolute或 relative)。 

也就是说拖动事件=onmousedown事件+onmousemove事件 

整个过程就是处理这三个事件来模拟drag事件
现在看看我实现的源代码: 

html代码: 

<div class="drag">
 <p class="title">标题(点击标题拖动)</p>
</div>

<div class="drag1">
 <p class="title">标题</p>
 点击我移动
</div>
 

jquery插件代码:

(function($){
 $.fn.drag=function(options){

 //默认配置
 var defaults = {
 handler:false,
 opacity:0.5
 };

 // 覆盖默认配置
 var opts = $.extend(defaults, options);

 this.each(function(){

 //初始标记变量
 var isMove=false,
 //handler如果没有设置任何值,则默认为移动对象本身,否则为所设置的handler值
 handler=opts.handler?$(this).find(opts.handler):$(this),
 _this=$(this), //移动的对象
 dx,dy;

 $(document)
 //移动鼠标,改变对象位置
 .mousemove(function(event){
 // console.log(isMove);
 if(isMove){

 //获得鼠标移动后位置
 var eX=event.pageX,eY=event.pageY;

 //更新对象坐标
 _this.css({'left':eX-dx,'top':eY-dy});

  }
 })

 //当放开鼠标,停止拖动
 .mouseup(function(){
 isMove=false;
 _this.fadeTo('fast', 1);
 //console.log(isMove);
  });

 handler
 //当按下鼠标,设置标记变量isMouseDown为true
 .mousedown(function(event){

 //判断最后触发事件的对象是否是handler
 if($(event.target).is(handler)){

 isMove=true;
 $(this).css('cursor','move');

 //console.log(isMove);
 _this.fadeTo('fast', opts.opacity);

 //鼠标相对于移动对象的坐标
 dx=event.pageX-parseInt(_this.css("left"));
 dy=event.pageY-parseInt(_this.css("top"));

  }
   });
  });
 };
 })(jQuery);
 

调用方法:

$(function(){

 //拖动标题
 $(".drag").drag({
handler:$('.title'),//操作拖动的对象,此对象必须是移动对象的子元素
opacity:0.7 //设置拖动时透明度
});

 //拖动主体对象
 $(".drag1").drag({
 opacity:0.7
 });

 });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript学习笔记1 数据类型
Jan 11 Javascript
浅析js中2个等号与3个等号的区别
Aug 06 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
javascript中闭包概念与用法深入理解
Dec 15 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
JS+CSS实现网页加载中的动画效果
Oct 27 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
详解如何运行vue项目
Apr 15 Javascript
vue移动端城市三级联动组件使用详解
Jul 26 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 #Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 #Javascript
JS获取一个未知DIV高度的方法
Aug 09 #Javascript
Bootstrap实现带动画过渡的弹出框
Aug 09 #Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 #Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 #Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 #Javascript
You might like
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
PHP脚本的10个技巧(2)
2006/10/09 PHP
PHP4实际应用经验篇(8)
2006/10/09 PHP
模仿OSO的论坛(二)
2006/10/09 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
jquery 问答知识整理
2010/02/11 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python双向循环链表实现方法分析
2018/07/30 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
Java中实现多态的机制
2015/08/09 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
调解协议书
2014/04/16 职场文书
居住证明范文
2015/06/17 职场文书
MySQL约束超详解
2021/09/04 MySQL
一起来学习Python的元组和列表
2022/03/13 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js