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点击button按钮跳转到另一个新页面
Oct 10 Javascript
jQuery使用fadein方法实现渐出效果实例
Mar 27 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
Jan 20 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
Mar 13 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
Node.js搭建小程序后台服务
2018/01/03 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
python3 map函数和filter函数详解
2019/08/26 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
写自荐信要注意什么
2013/12/26 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
python requests模块的使用示例
2021/04/07 Python
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js