使用div创建选取框

简介: 使用div实现了选取框效果. 代码如下 1 2 3 4 myCanvasTest 5 6 #selection{ 7 border: 3px red solid; 8 ...

使用div实现了选取框效果.

代码如下

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title>myCanvasTest</title>
  5     <style type="text/css">
  6         #selection{
  7             border: 3px red solid;
  8             display: none;
  9             position: absolute;
 10         }
 11         *{
 12             cursor: crosshair;
 13         }
 14     </style>
 15 </head>
 16 <body>
 17     <div id="selection"></div>
 18 </body>
 19 <script type="text/javascript">
 20     var selection,                                                    //存储坐标量(方便用)
 21         flag             = false,                                    //作为是否在鼠标点击时的移动标记
 22         selectionDiv     = document.getElementById("selection");        //获取选取框div对象
 23 
 24     //初始化坐标对象
 25     function init () {
 26          selection = {
 27             top        :0,
 28             left    :0,
 29             width    :0,
 30             height    :0
 31         };
 32     }
 33 
 34     //鼠标按下,记录坐标
 35     function setLocation (x, y) {
 36         selection.left = x;
 37         selection.top = y;
 38     }
 39 
 40     //鼠标移动计算距离存入宽高
 41     function moveLocation (x, y) {
 42         selection.width = selection.left - x;
 43         selection.height = selection.top - y;
 44         moveIt();                
 45     }
 46 
 47     //更新div坐标尺寸信息
 48     function moveIt () {
 49         console.log(selection);
 50         //高度宽度小于0时说明拖拽x,y为正值,如小于0说明拖动为反方向.需重新计算top及left保证拖拽效果
 51         selectionDiv.style.top         = (selection.height < 0 ? 
 52                                         selection.top :                     
 53                                         selection.top - selection.height) 
 54                                     + "px";
 55         selectionDiv.style.left     = (selection.width < 0 ? 
 56                                         selection.left : 
 57                                         selection.left - selection.width) 
 58                                     + "px";
 59         //Math.abs()方法返回绝对值
 60         selectionDiv.style.width     = Math.abs(selection.width) 
 61                                     + "px";
 62         selectionDiv.style.height     = Math.abs(selection.height) 
 63                                     + "px";
 64     }
 65 
 66     //显示选取框div
 67     function showIt () {
 68         selectionDiv.style.display = "block";
 69     }
 70 
 71     //隐藏选取框div
 72     function hideIt () {
 73         selectionDiv.style.display = "none";
 74     }
 75 
 76     //鼠标按下触发事件
 77     window.onmousedown = function (e) {
 78         var x = e.clientX,
 79             y = e.clientY;
 80         //初始化坐标对象
 81         init();
 82         //显示div对象
 83         showIt();
 84         //设置top,left值.作为本次拖拽的原点
 85         setLocation(x, y);
 86         //调用移动方法
 87         moveIt();
 88         //将标记打开
 89         flag = true;
 90     }
 91 
 92     //鼠标移动时触发
 93     window.onmousemove = function (e) {
 94         var x = e.clientX,
 95             y = e.clientY;
 96         //当标记开启时,触发事件
 97         if(flag)
 98             moveLocation(x, y);
 99     }
100 
101     //鼠标抬起,触发事件,将div隐藏,清除坐标对象,关闭标记
102     window.onmouseup = function (e) {
103         //隐藏div
104         hideIt();
105         //清除坐标信息
106         init();
107         //关闭标记
108         flag = false;
109     }
110 
111 </script>
112 </html>

感觉在编码的时候.卡在了x,y都为负值的地方.

为了保证在x,y都为负值时还有拖拽效果.必须要将div的位置移动.

看起来就像拖拽一样.实则在更新大小的同时更新了div的坐标位置

目录
相关文章
|
18天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
5月前
div高度设置100%无效的问题
div高度设置100%无效的问题
64 1
|
7月前
|
前端开发 JavaScript
点击按钮,将奇数列的li背景色设置为红色,偶数列li背景色设置为绿色
点击按钮,将奇数列的li背景色设置为红色,偶数列li背景色设置为绿色
|
5月前
|
前端开发
input框点击时去掉默认的外层边框
input框点击时去掉默认的外层边框
28 0
|
5月前
两个div并列一行显示的多种方法
两个div并列一行显示的多种方法
|
5月前
div层定位在网页右下角
div层定位在网页右下角
23 0
|
前端开发 容器
CSS 从大图中选取部分区域作为目标图标
CSS 从大图中选取部分区域作为目标图标
79 0
关于去掉Li标签前面的小圆点和距离/显示下划线
解决方法 去掉Li标签前面的距离:     设置ul   padding:0px; 去掉Li标签前面的小圆点: 设置li      list-style-type:none; 显示下划线:    text-decoration:underline;
2945 0
|
前端开发 JavaScript
根据Select框的取值,动态显示另外的Div(十)
在员工入职时,有这么一个动作。如果选择的是编外的入职,那么则显示后面相关联的员工。 如果不是编外的入职,则隐藏后面的相关联的员工。
205 0
根据Select框的取值,动态显示另外的Div(十)