在线演示:http://sandbox.runjs.cn/show/2drrwkrx

关键点:保持一个不变,鼠标拖动时与边框的距离 === 鼠标左击时与边框的距离

源码:

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>具备吸附功能的拖曳</title>
<link rel="stylesheet" type="text/css" href="http://sandbox.runjs.cn/uploads/rs/294/c4c2o6mh/base.css"> <style>
.c-box{
position: absolute;
top:100px;
width: 100px;
height: 100px;
cursor: move;
background-color: #9AFF9A;
}
</style>
<script src="http://sandbox.runjs.cn/uploads/rs/294/c4c2o6mh/jquery.js"></script> </head>
<body>
<div id="box" class="c-box"></div>
<script>
var box = $('#box');
//鼠标按下
box.mousedown(function(event) {
if(event.which==1){ //左击
var left = box.offset().left,//在当前视口的偏移,可以理解为到最终父级(body,html)的距离,别受到js定位父级 //offsetparent的影响,与其对应的是jQuery中position()方法
top = box.offset().top,
d_x = event.pageX - left,
d_y = event.pageY - top,
wx = $(document).outerWidth(),//浏览器可视区域
wy = $(document).outerHeight(),
bx = box.width(),
by = box.height();
$(document).mousemove(function(event) { //绑定到doucument,防止移动太快脱离鼠标
var x = event.pageX - d_x,
y = event.pageY - d_y;
if(x<40) x = 0;
else if(wx-x-bx<40)
x = wx - bx;
if(y<40) y = 0;
else if(wy-y-by<40)
y = wy-by;
box.css({
left: x,
top: y
}); }); $(document).mouseup(function(event) {
$(document).off('mousemove');
}); return false;//防止冒泡
}
}); </script>
</body>
</html>

遇到的问题

(1)window中的top对象,参考资料:http://blog.163.com/zhaoyanping_1125/blog/static/201329153201206105031895/

(2)防止鼠标脱离文本框,讲mouseup,mouseover绑定到doucuemnt

(3)区分offset()方法与position()方法

(4)可以将拖曳封装为通用方法

资料:判断鼠标左击与右击

jQuery学习_具备吸附功能的拖曳框的更多相关文章

  1. 【jQuery学习】写一个简单的弹框页面,火狐浏览器有弹框,但IE8没有弹框的原因?

    我也是刚学习jQuery,就从官网上下载了jQuery的包,版本是3.2.1 代码 如下: <!DOCTYPE html> <html> <head> <me ...

  2. jQuery学习(五)——使用JQ完成复选框的全选和全不选

    1.在系统后台进行人员管理时,进行批量删除,使用jq完成全选和全不选 步骤分析: 第一步:引入jquery文件 第二步:书写页面加载函数 第三步:为上面的复选框绑定单击事件 第四步:将下面所有的复选框 ...

  3. jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能

    ▓▓▓▓▓▓ 大致介绍 学习了妙味,用原生的JavaScript实现jQuery中的某些部分功能 定义自己的函数库lQuery ▓▓▓▓▓▓ $()选择器的实现 jQuery是面向对象的,所以自己编写 ...

  4. jQuery源代码学习_工具函数_type

    jquery源代码学习_工具函数_type jquery里面有一个很重要的工具函数,$.type函数用来判断类型,今天写这篇文章,是来回顾type函数的设计思想,深入理解. 首先来看一下最终结果: 上 ...

  5. jQuery学习之路(8)- 表单验证插件-Validation

    ▓▓▓▓▓▓ 大致介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 ...

  6. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  7. jQuery 学习笔记

    jQuery 学习笔记   一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById( ...

  8. Web应用开发工具及语言需要具备的功能探索

    1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...

  9. jQuery学习笔记(一):入门

      jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操 ...

随机推荐

  1. 【转】Linux 下取进程占用 cpu/内存 最高的前10个进程

    # Linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  2. Hadoop2.7.x中所有的DataNode都启动不了解决办法

    参考:Hadoop集群所有的DataNode都启动不了解决办法说明现象:我自己出现这个问题的原因是:自己在namenode格式化之后创建了一些文件,然后重新执行了namenode格式化导致的. 现象就 ...

  3. rpm命令,yum命令大全

    rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组合 ...

  4. 基于jQuery和Bootstrap的手风琴垂直菜单

    在线演示 本地下载

  5. zabbix 安装配置

    zabbix的配置文件一般有三种:zabbixserver的配置文件      zabbix_server.confzabbixproxy的配置文件      zabbix_proxy.confzab ...

  6. redis入门笔记

    redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...

  7. AngularJS Source code

    Angular.js 辅助函数 lowercase hasOwnProperty uppercase mannualLowercase mannualUppercase isArrayLike for ...

  8. eclipse官网下载

    Provided by IBM Cloud Eclipse IDE for Java Developers http://eclipse.bluemix.net/packages/photon/dat ...

  9. 平滑重启php

    kill -USR2 `cat /usr/local/webserver/php/var/run/php-fpm.pid`

  10. Pandas IO工具

    Pandas I/O API是一套像pd.read_csv()一样返回Pandas对象的顶级读取器函数. 读取文本文件(或平面文件)的两个主要功能是read_csv()和read_table().它们 ...