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 相关文章推荐
js中获取事件对象的方法小结
Mar 13 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 Javascript
JS实现标签页效果(配合css)
Apr 03 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
Aug 01 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
JScript实现地址选择功能
Aug 15 Javascript
浅谈vue引入css,less遇到的坑和解决方法
Jan 20 Javascript
javascript将非数值转换为数值
Sep 13 Javascript
js拖动滑块和点击水波纹效果实例代码
Oct 16 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 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
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
php注册登录系统简化版
2020/12/28 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
php和asp语法上的区别总结
2019/05/12 PHP
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
python做量化投资系列之比特币初始配置
2018/01/23 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
python将音频进行变速的操作方法
2020/04/08 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
毕业自我鉴定怎么写
2014/03/25 职场文书
创先争优个人总结
2015/03/04 职场文书
自主招生自荐信范文
2015/03/04 职场文书