JS拖动鼠标画出方框实现鼠标选区的方法


Posted in Javascript onAugust 05, 2015

本文实例讲述了JS拖动鼠标画出方框实现鼠标选区的方法。分享给大家供大家参考。具体如下:

相当实用的一个JS技巧,拖动鼠标可画出一个方框,可作为一个选区的功能,可以用来画流程图,设计草图什么的,也可以作为上传头像时裁切选择图片,在头像裁切中使用广泛,鼠标在图片上拖动拉出一个方框,这个方框就代表着选区的功能,目前网页上已流行的一种操作。主要是依赖于JavaScript代码来实现。

运行效果如下图所示:

JS拖动鼠标画出方框实现鼠标选区的方法

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
<head>
<title>鼠标拖动画矩形</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style type="text/css">
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0}
html{color:#000;overflow-y:scoll;overflow:-moz-scrollbars-vertical}
.div{position:absolute; border:1px dashed blue; width:0px; height:0px;left:0px; top:0px; overflow:hidden;}
.retc{position:absolute; border:1px solid #CCCCCC; overflow:hidden; background:#EFEFEF}
</style>
</head>
<body> 
</body>
<script language = "javascript">
 var wId = "w";
 var index = 0;
 var startX = 0, startY = 0;
 var flag = false;
 var retcLeft = "0px", retcTop = "0px", retcHeight = "0px", retcWidth = "0px";
 document.onmousedown = function(e){
  flag = true;
  try{
   var evt = window.event || e;
   var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
   var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
   startX = evt.clientX + scrollLeft;
   startY = evt.clientY + scrollTop;
   index++;
   var div = document.createElement("div");
   div.id = wId + index;
   div.className = "div";
   div.style.marginLeft = startX + "px";
   div.style.marginTop = startY + "px";
   document.body.appendChild(div);
  }catch(e){
  //alert(e);
  }
 }
 document.onmouseup = function(){
  try{
   document.body.removeChild($(wId + index));
   var div = document.createElement("div");
   div.className = "retc";
   div.style.marginLeft = retcLeft;
   div.style.marginTop = retcTop;
   div.style.width = retcWidth;
   div.style.height = retcHeight;
   document.body.appendChild(div);
  }catch(e){
   //alert(e);
  }
  flag = false;
 }
 document.onmousemove = function(e){
  if(flag){
   try{
   var evt = window.event || e;
   var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
   var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
   retcLeft = (startX - evt.clientX - scrollLeft > 0 ? evt.clientX + scrollLeft : startX) + "px";
   retcTop = (startY - evt.clientY - scrollTop > 0 ? evt.clientY + scrollTop : startY) + "px";
   retcHeight = Math.abs(startY - evt.clientY - scrollTop) + "px";
   retcWidth = Math.abs(startX - evt.clientX - scrollLeft) + "px";
   $(wId + index).style.marginLeft = retcLeft;
   $(wId + index).style.marginTop = retcTop;
   $(wId + index).style.width = retcWidth;
   $(wId + index).style.height = retcHeight;
   }catch(e){
    //alert(e);
   } 
  }
 }
 var $ = function(id){
  return document.getElementById(id);
 }
</script>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript脚本编程解决考试分数统计问题
Oct 18 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
firebug的一个有趣现象介绍
Nov 30 Javascript
jquery常用操作小结
Jul 21 Javascript
JavaScript的9种继承实现方式归纳
May 18 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
Element Backtop回到顶部的具体使用
Jul 27 Javascript
JS绘制生成花瓣效果的方法
Aug 05 #Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 #Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 #Javascript
JS模拟键盘打字效果的方法
Aug 05 #Javascript
js点击列表文字对应该行显示背景颜色的实现代码
Aug 05 #Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 #Javascript
js绘制圆形和矩形的方法
Aug 05 #Javascript
You might like
ftp类(example.php)
2006/10/09 PHP
将PHP作为Shell脚本语言使用
2006/10/09 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
python实现无证书加密解密实例
2014/10/27 Python
实例讲解python中的协程
2018/10/08 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python pygame实现球球大作战
2019/11/25 Python
Python阶乘求和的代码详解
2020/02/14 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
行政总监岗位职责
2013/12/05 职场文书
八年级生物教学反思
2014/01/22 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
企业百日安全活动总结
2015/05/07 职场文书
用电申请报告范文
2015/05/18 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis