学习编程,与君共勉。
针对JavaScript拖动鼠标绘制方框实现选区的方法,在网上查了很多,但感觉不是写的很繁琐就是感觉很乱,没有一个详细的步骤,这对于我们这些菜鸟来说真的很难理解,所以我写了一份比较简洁,注释详细的代码供大家参考。
先把代码放上来:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#box{width: 500px;height: 500px;border: 1px solid black;margin: 20px auto;position: relative;}#box div{border: 1px solid green;position: absolute;}</style><script>window.onload = function () {var oBox = document.getElementById("box");//鼠标按下,获取初始点oBox.onmousedown = function (ev) {ev = window.event || ev;//1.获取按下的点var x1 = ev.clientX - oBox.offsetLeft;var y1 = ev.clientY - oBox.offsetTop;//2.创建divvar oDiv = document.createElement("div");oBox.appendChild(oDiv);oBox.onmousemove = function (ev) {ev = window.event || ev;var x2 = ev.clientX - oBox.offsetLeft;var y2 = ev.clientY - oBox.offsetTop;//3.设置div的样式oDiv.style.left = (x2 > x1 ? x1 : x2) +"px"; oDiv.style.top = (y2 > y1 ? y1 : y2) +"px";oDiv.style.width = Math.abs(x2-x1)+"px";oDiv.style.height =Math.abs(y2-y1)+"px";}return false;  //解除在划动过程中鼠标样式改变的BUG}//在鼠标抬起后终止onmousemove事件document.onmouseup = function () {oBox.onmousemove = null;}}</script>
</head>
<body>
<div id="box"></div>
</body>
</html>

现在开始对代码进行解释:在写代码之前,我们一定要想清楚自己想要干什么,比如说这里,我们的目的是绘制方框;然后下一步我们就要考虑怎么实现,在这里我用一段代码表示:

    var oDiv = document.createElement("div");  //创建divoBox.appendChild(oDiv);     //加入到父元素oDiv.style.left = "100px";    //设置坐标以及宽高oDiv.style.top = "100px";    oDiv.style.width = "100px";oDiv.style.height = "100px";     

也就是说我们的最终目的是通过鼠标拖动创建div,然后将它放到父元素中显示,最后设置它的位置和宽高,这样就可以实现目的。
代码中已经有详细的注释,这里就不做赘述,我这里特意说明一下在设置div样式时,加入了反向绘制方块,三目运算符的功能是判断绘制方块的方向,如果 x2>x1,则说明是从上向下绘制,反之从下至上;而Math.abs()则是取绝对值,如果从下往上的话x2小于x1,这里就获取不了宽高。
当然,如果有对client,offset及scroll有疑问的话,建议先去参考下BOM教程。
送给诸位,也是送给自己的一句话:Learn No Stop Forever !

JavaScript鼠标拖动绘制方框实现选区相关推荐

  1. Qt鼠标拖动绘制基本几何图形

    概述 用Qt鼠标事件实现基本几何图形的绘制,支持直线.矩形.圆形.椭圆.后期可以在此基础上进行扩展. 效果图 实现 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独 ...

  2. C语言跟随鼠标画方框,JS拖动鼠标画出方框实现鼠标选区的方法

    本文实例讲述了JS拖动鼠标画出方框实现鼠标选区的方法.分享给大家供大家参考.具体如下: 相当实用的一个JS技巧,拖动鼠标可画出一个方框,可作为一个选区的功能,可以用来画流程图,设计草图什么的,也可以作 ...

  3. python matplotlib.pyplot 如何实时绘制三维动态窗口?(可鼠标拖动角度)

    实时绘制三维图并更新窗口 # -*- coding: utf-8 -*- """ @File : test.py @Time : 2020/5/26 18:09 @Aut ...

  4. 【Java AWT 图形界面编程】使用鼠标滚轮缩放 Canvas 画布中绘制的背景图像 ( 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )

    文章目录 一.鼠标滚轮缩放的中心点设置为当前鼠标中心点 - 要点分析 1.保存当前鼠标指针指向的位置 2.根据鼠标指针指向的位置以及比例重新计算图片位置 二.绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩 ...

  5. 利用javascript和WebGL绘制地球 【翻译】

    利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个AP ...

  6. html 圆圈透明 其他不透明,Javascript HTML5 Canvas绘制透明圆圈

    我需要有一个函数在画布上绘制几个圆圈,从mousedown at center = x,y开始,并将鼠标拖动到deltaX,deltaY,从而为每个圆圈创建半径r.圆圈无法填充(需要它们透明),因此用 ...

  7. C# 创建一个Panel并可以通过鼠标拖动并可以拉动改变大小(可生成多个Panel并保存布局到数据库中)

    C# 创建一个Panel并可以通过鼠标拖动并可以拉动改变大小(可生成多个Panel并保存布局到数据库中) 一个用于绘制视频布局的控件,可在背景Panel上生成新的Panel并可以拖动改变位置以及调整大 ...

  8. 用鼠标拖动图片的JS代码

    代码简介: 用鼠标拖动一个图片移动,就像拖动一个层一样,这是一个JS拖动类代码,你可以无限制的增加图片,代码复用率比较高. 代码内容: View Code <html><HEAD&g ...

  9. Python+turtle交互式绘图:可以用鼠标拖动的小海龟

    功能描述:代码运行后,在窗口上显示3个小海龟,使用鼠标拖动小海龟时可以动态改变窗口颜色,如下图所示. 说明:本例代码主体部分来自turtle Demo,我稍微修改了一下,重点增加了注释,方便阅读和理解 ...

最新文章

  1. Bert时代的创新:Bert应用模式比较及其它 | 技术头条
  2. 根据mysql数据库日志恢复删除数据
  3. 应用服务关闭时eureka客户端会向server发送销毁请求
  4. 每日一题:leetcode190.颠倒二进制位
  5. linux快速php,Linux 下的这些高效指令,是你快速学习的神器
  6. Linux: 不用密码直接用ssh 登入到远端电脑(RAS/DSA认证)
  7. pytorch torch.reshape
  8. python全网表情包_Python爬虫爬取最右公众号表情包资源
  9. mysql rds 定时执行_RDS下执行SQL小脚本
  10. binlog的基本介绍和操作
  11. 凸优化第二章凸集 2.3 保凸运算
  12. python re span_Python的re模块与正则表达式小结
  13. linux 中特殊权限,Linux SetGID(SGID)文件特殊权限用法详解
  14. bootice工具修复linux,bootice工具怎么修复引导win7
  15. cJSON字符串解析
  16. excel 双纵坐标 图文介绍excel 2007如何画双纵坐标图
  17. .NET Core 如何验证信用卡卡号
  18. 保持hlist_node内存的紧凑性连续性以提高遍历性能
  19. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换的方法
  20. Java单元测试之JUnit 5快速上手

热门文章

  1. 用C++来实现关系矩阵的性质(自反性、反自反性、对称性、反对称性、)的判断
  2. 小议高效团队的八个特性
  3. 有趣的定律4. 彼德原理
  4. 从延迟12周到同步开发同步升级,紫光展锐如何做到快人一步?
  5. 一台计算机可作为另一台主机,电脑能给另一台电脑装系统吗
  6. ^   $   .*   []   综合运用
  7. Play with Tacker(by quqi99)
  8. 颈椎病10级测评表,你到哪级了?
  9. STM32学习记录——光敏传感器的使用
  10. 【NKOJ-3569】葡萄酒交易