如果将div的可拖动范围限定在指定元素内

如果将div的可拖动范围限定在指定元素内:
拖动效果大家可能比较熟悉,但是通常会对拖动范围进行一下限定,通过一个实例代码介绍一下如何将一个div的拖动限定在一个指定元素范围内,代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
#box{
  width:400px;
  height:300px;
  background-color:red;
  margin:0px auto;
  position:relative;
}
#drag{
  width:50px;
  height:50px;
  background:green;
  position:absolute;
}
</style>
<script type="text/javascript">
window.onload=function(){
  var obox=document.getElementById("box");
  var odrag=document.getElementById("drag");
  var flag=false;
  var x,y;
  var ol,ot;
  odrag.onmousedown=function(ev){
    var ev=window.event||ev;
    flag=true;
    x=ev.clientX;
    y=ev.clientY;
    ol=odrag.offsetLeft;
    ot=odrag.offsetTop;
  }
  document.onmousemove=function(ev){
    if(flag==false) return;
    var ev=window.event||ev;
    var _x,_y;
    _x=ev.clientX-x+ol;
    _y=ev.clientY-y+ot;
    if(_x<0) _x=0;
    if(_y<0) _y=0;
    if(_x>obox.offsetWidth-odrag.offsetWidth) _x=obox.offsetWidth-odrag.offsetWidth;
    if(_y>obox.offsetHeight-odrag.offsetHeight) _y=obox.offsetHeight-odrag.offsetHeight;

     odrag.style.left=_x+"px";
     odrag.style.top=_y+"px";
  }
  document.onmouseup=function(){flag=false;}
}
</script>
</head>
<body>
<div id="box">
  <div id="drag"></div>
</div>
</body>
</html>

以上代码实现了我们的要求,可以将指定的绿色的div的拖动范围限定在红色div之内,下面介绍一下它的实现过程。
一.代码注释:
1.window.onload=function(){},文档内容完全加载完毕再去执行函数中的代码。
2.var obox=document.getElementById("box"),获取id属性值为box元素对象。
3.var odrag=document.getElementById("drag"),获取id属性会为drag的元素对象。
4.var flag=false,声明一个变量flag并赋初值为false,它用来标识是否可以拖动,为false不可拖动,为true可以拖动。
5.var x,y,声明两个变量,用来存储鼠标按下时鼠标指针在浏览器客户区的坐标。
6.var ol,ot,声明两个变量,用来存储绿色div距离红色div距离。
7.odrag.onmousedown=function(ev){},为绿色div注册onmousedown事件处理函数,ev是事件对象。
8.var ev=window.event||ev,事件对象的兼容性处理。
9.flag=true,设置为true,也就是说当鼠标在绿色div中按下时候才可以进行拖动。
10.x=ev.clientX,获取鼠标按下时,鼠标指针距离浏览器客户区左端的距离。
11.y=ev.clientY,获取鼠标按下时,鼠标指针距离浏览器客户区顶端的距离。
12.ol=odrag.offsetLeft,获取鼠标按下时,绿色div的左边缘距离红色div左侧的距离。
13.ot=odrag.offsetTop,获取鼠标按下时,绿色div的上边缘距离红色div上侧的距离。
14.document.onmousemove=function(ev){},为document注册onmousemove事件处理函数,很多朋友可能因为为什么要将其注册在document上而不是odrag,这是为了防止当鼠标拖动过程中,鼠标指针移出odrag导致拖动无效现象。
15.if(flag==false) return,如果flag值为false,这直接跳出。
16.var ev=window.event||ev,事件对象的兼容性处理。
17.var _x,_y,声明两个局部变量,用来存储绿色div的left和top属性值。
18._x=ev.clientX-x+ol,获取拖动过程中,left属性值,一个数学问题。
19._y=ev.clientY-y+ot,获取拖动过程中,top属性值,一个数学问题。
20.if(_x<0) _x=0,防止超出左边缘。
21.if(_y<0) _y=0,防止超出上边缘。
22.if(_x>obox.offsetWidth-odrag.offsetWidth) _x=obox.offsetWidth-odrag.offsetWidth,防止超出右边缘。
23.if(_y>obox.offsetHeight-odrag.offsetHeight) _y=obox.offsetHeight-odrag.offsetHeight,防止超出下边缘。
24.odrag.style.left=_x+"px",odrag.style.top=_y+"px"设置绿色div的left和top值。
25.document.onmouseup=function(){flag=false;},当鼠标松开时,将flag设置为false。
二.相关阅读:
1.onmousedown事件可以参阅javascript的onmousedown事件一章节。 
2.var ev=window.event||ev可以参阅var ev=window.event||ev的作用是什么一章节。 
3.clientX可以参阅javascript的clientX事件属性一章节。 
4.offsetLeft可以参阅scrollTop、offsetHeight和offsetTop等属性用法详解一章节。
5.事件冒泡可以参阅javascript事件冒泡简单介绍一章节。 
6.onmousemove事件可以参阅javascript的onmousemove事件一章节。 
7.onmouseup事件可以参阅javascript的onmouseup事件一章节。

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=11818

更多内容可以参阅:http://www.softwhy.com/javascript/

时间: 2024-12-21 04:14:08

如果将div的可拖动范围限定在指定元素内的相关文章

div块级元素内文字换行word-wrap, word-break,white-space。

word-wrap: normal; || word-break: normal; 当word-wrap或者word-break为normal时,也就是浏览器的默认设置时. 换行规则是这样的: 情景一: 当一个单词在行尾不能完整容纳时,会自动将这个单词换到下一行,示例如下. 情景二: 当一个长长的单词在行尾不能完整容纳,并且换行后还是不能容纳时,单词就会溢出容器,示例如下. word-wrap: break-word; 当word-wrap设置为break-word时, 换行规则如下:  情景一

div层的拖动(setCapture())

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"

div可随意拖动

function DragDlg(){ var helperdialogwrapper =$(".helper-dialog-wrapper"); var x = 0; var y = 0; var l = 0; var t = 0; var isDown = false; //鼠标按下事件 $(".helper-dialog-wrapper").bind("mousedown",function(e) { //获取x坐标和y坐标 x = e.c

jQuery实现点击div外的区域,来隐藏指定节点

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(document).bind('click', function

div在父元素内上下左右居中

(1)宽度和高度已知的 .box { width: 400px; height: 200px; position: relative; background: red; } .content { width: 200px; height: 100px; position: absolute; top: 50%; left: 50%; margin-left: -100px; margin-top: -50px; background: green; } </style> <div cla

div宽高不确定,在父元素div中居中。

第一种方法 1 <div class="parent"> 2 <div class="child"></div> 3 </div> 4 5 <style> 6 .parent { 7 display: flex; 8 width: 100%; 9 height: 300px; 10 background: #cecece; 11 align-items: center; /* 垂直居中 */ 12 just

Codeforces Round #271 (Div. 2) F.Ant colony(线段树 + 统计区间内某数的个数)

F. Ant colony Mole is hungry again. He found one ant colony, consisting of n ants, ordered in a row. Each ant i (1 ≤ i ≤ n) has a strength si. In order to make his dinner more interesting, Mole organizes a version of «Hunger Games» for the ants. He c

当div元素内的内容超出其宽度时,自动隐藏超出的内容

word-break:keep-all;/* 不换行 */ white-space:nowrap;/* 不换行 */ overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */ text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) :需与 overflow:hidden;一起使用.*/

精通CSS+DIV网页样式与布局--页面和浏览器元素

在页面和浏览器中,除了文字.图片.表格.表单等,还有很多各种各样的元素,在上篇博文中,小编主要简单的介绍了一下在CSS中如何设置表格和表单,今天小编主要简单介绍一下丰富的超链接特效.鼠标特效.页面滚动条.首先我们来看一张思维导图: 接着,小编会跟随上述思维导图的足迹,慢慢探寻,丰富的超链接特效中,我们首先来介绍动态超链接,我们来看一下例子的代码和运行的效果:  动态超链接 <span style="font-size:18px;"><span style="