//鼠标按下时的X Y坐标 var mouseDownX; var mouseDownY; //鼠标按下时移动的X Y 坐标 var mouseMoveX; var mouseMove" />
当前位置:首页 > 日记 > 正文

jQuery 实现鼠标画框并对框内数据选中的实例代码

jQuery 实现鼠标画框并对框内数据选中的实例代码

jquery库:

jquery -1.10.2.min.js,jQuery UI - v1.12.1。

jQuery 代码

不多说了,之间上代码。不懂的地方看注释。

<script type="text/javascript"> //鼠标按下时的X Y坐标 var mouseDownX; var mouseDownY; //鼠标按下时移动的X Y 坐标 var mouseMoveX; var mouseMoveY; //移动的状态 var isMove = false; /*初始化 选择框 */ function init() {  $("#selected").css("display", "none");  $("#selected").css("top", "0");  $("#selected").css("left", "0");  $("#selected").css("width", "0");  $("#selected").css("height", "0"); } $(document).ready(function() {  init();  var selectedTD = new Array();//创建被选中表格数组  var TD = $("td");//获取所有表格信息  for ( var i = 0; i < TD.length; i++) {   selectedTD.push(TD[i]);  }  $("#tableDiv").mousedown(function(event) {   mouseDownX = event.clientX - $(this).offset().left;;   mouseDownY = event.clientY - $(this).offset().top;   console.log("mouseDownX=" + mouseDownX +" mouseDownY=" + mouseDownY );   if(event.target.id.match(/selected/)) {    isMove = true;   }   //鼠标按下并移动时进行判断(拖拽 or 画框)   $("#tableDiv").mousemove(function(event) {    mouseMoveX = event.clientX - $(this).offset().left;    mouseMoveY = event.clientY - $(this).offset().top;    var selectDiv = document.getElementById("selected");    if (isMove) {     //拖拽的代码,因为实在不想算 xy 了,所以使用了jquery ui     $("#selected").draggable();     //这部分是负责画框的时候,实时把框住的表格变色的,(代码和下面的代码重复了)     var left = selectDiv.offsetLeft, top = selectDiv.offsetTop; width = selectDiv.offsetWidth, height = selectDiv.offsetHeight;     for ( var i = 0; i < selectedTD.length; i++) {      var sl = selectedTD[i].offsetWidth + selectedTD[i].offsetLeft;      var st = selectedTD[i].offsetHeight + selectedTD[i].offsetTop;      if (sl > left && st > top && selectedTD[i].offsetLeft < left + width && selectedTD[i].offsetTop < top + height) {       if (selectedTD[i].className.indexOf("selected") == -1) {        selectedTD[i].className = "selected";       }      } else {        if (selectedTD[i].className.indexOf("selected") != -1) {         selectedTD[i].className = "TD";        }      }     }    } else {     //重复的代码,完了再把它抽取出来     var left = selectDiv.offsetLeft, top = selectDiv.offsetTop; width = selectDiv.offsetWidth, height = selectDiv.offsetHeight;     for ( var i = 0; i < selectedTD.length; i++) {      var sl = selectedTD[i].offsetWidth + selectedTD[i].offsetLeft;      var st = selectedTD[i].offsetHeight + selectedTD[i].offsetTop;      if (sl > left && st > top && selectedTD[i].offsetLeft < left + width && selectedTD[i].offsetTop < top + height) {       if (selectedTD[i].className.indexOf("selected") == -1) {        selectedTD[i].className = "selected";       }      } else {       if (selectedTD[i].className.indexOf("selected") != -1) {         selectedTD[i].className = "TD";        }      }     }     //鼠标抬起结束画框,和拖动     $("#tableDiv").mouseup(function() {      console.log("mouseUpX=" + mouseMoveX + " mouseUpY=" + mouseMoveX);      isMove = false;      $(this).unbind('mousemove');     })     //画框     displaySelected(mouseDownY, mouseDownX, mouseMoveX, mouseMoveY);    }   })  })  //当鼠标在已经画好的框上时,改变鼠标指针样式,就是十字形了  $("#selected").mouseenter(function() {   $("#selected").css("cursor", "move");  }); }); function displaySelected(mouseDownY, mouseDownX, mouseUpX, mouseUpY) {  $("#selected").css("display", "block");  $("#selected").css("top", mouseDownY);  $("#selected").css("left", mouseDownX);  var moveX = mouseMoveX - mouseDownX;  var moveY = mouseMoveY - mouseDownY;  if (moveY < 0) {    $("#selected").css("top", event.clientY - $("#table").offset().top);  }  if (moveX < 0) {   $("#selected").css("left", event.clientX - $("#table").offset().left);  }  $("#selected").css("width", Math.abs(moveX));  $("#selected").css("height", Math.abs(moveY)); } </script>

测试用的html

使用table进行的测试:

<div id="tableDiv" style="width: 1500px; height: 1500px;top: 100px; left:100px; position: absolute;">  <div id="selected" style="border:5px dotted rgb(239, 37, 17);position: absolute;display: none;"></div>  <table border="1" style=" width: 1500px; height: 1500px;" id="table">  <tr>   <td id="1" class="TD"></td>   <td id="2" class="TD"></td>   <td id="3" class="TD"></td>   <td id="4" class="TD"></td>   <td id="5" class="TD"></td>   <td id="6" class="TD"></td>  </tr>  <tr>   <td id="7" class="TD"></td>   <td id="8" class="TD"></td>   <td id="9" class="TD"></td>   <td id="10" class="TD"></td>   <td id="11" class="TD"></td>   <td id="12" class="TD"></td>  </tr>  <tr>   <td id="1" class="TD"></td>   <td id="2" class="TD"></td>   <td id="3" class="TD"></td>   <td id="4" class="TD"></td>   <td id="5" class="TD"></td>   <td id="6" class="TD"></td>  </tr>  </table> <!--表格代码太多所以...--> </div>

效果图

以上所述是小编给大家介绍的jQuery 实现鼠标画框并对框内数据选中的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

相关文章

WebService传XML 简单实例

WebService传XML 简单实例

简单实例,电脑软件,WebService,XML,WebService传XML 简单实例传送 [WebMethod]public XmlDataDocument GetSiteAData(string AssignName) { XmlDataDocument xd = new XmlDataDocument(); DataSet ds = BusinessWork.BusinessWor…

Windows7 IIS+ASP http500内部服务

Windows7 IIS+ASP http500内部服务

显示,错误,服务器,本来面目,电脑软件,在WINDOWS 7上安装了IIS7.5,调试ASP程序时出现http500内部服务器错误:首先,打开IE选项设置&mdash;高级&mdash;把&ldquo;显示友好http错误信息&rdquo;,可以看到如下错误提示:解决办法是打开将错误送到浏览器…

详谈jQuery unbind 删除绑定事件 /

详谈jQuery unbind 删除绑定事件 /

标签,删除,绑定事件,方法,移除,jQuery unbind 删除绑定事件unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件。如果没有参数,则删除所有绑定的事件。你可以将你用bind()注册的自定义事件取消绑定。如果提供了…

给Ajax返回的HTML标签动态添加样式

给Ajax返回的HTML标签动态添加样式

标签,方法,动态添加,样式,电脑软件,今天在做项目时,在页面中用ajax返回了另一个页面,突然发现返回页面中的表格把页面给顶了出去,经过一番研究,终于解决了。先准备好要返回内容的容器<div class="container"> </div>预定义一个样式,以便返回的…

Word2013怎样对表格更换样式颜色

Word2013怎样对表格更换样式颜色

样式,表格,颜色,电脑软件,  Word2013表格初始默认的样式看起来感觉没什么特色,如果想为了提高表格的质量,我们可以更换样式颜色。以下是小编为您带来的关于Word2013表格更换样式颜色,希望对您有所帮助。Word2013表格更换样式颜色具体做法:1、…

thinkPHP框架中执行原生SQL语句的

thinkPHP框架中执行原生SQL语句的

框架,执行,语句,原生,方法,本文实例讲述了thinkPHP框架中执行原生SQL语句的方法。分享给大家供大家参考,具体如下:怎样在thinkphp里面执行原生的sql语句?$Model = new Model();//或者 $Model = D(); 或者 $Model = M();$sql = "select * from…

JS实现小球的弹性碰撞效果

JS实现小球的弹性碰撞效果

弹性碰撞,小球,效果,电脑软件,JS,一、HTML代码(body部分) <body> <!--只需要做一个大div包裹几个小div即可,你想要几个小球碰撞就在内部做几个div即可,这里我们做了6个小球--> <div id="main"> <div></div> <div></div> <di…

.NET附件上传大小限制控制

.NET附件上传大小限制控制

控制,上传,附件,大小,电脑软件,今天在公司的服务器上搭建了一个Dvbbs.Net 1.1,协助管理公司一些办公文件,由于要上传的文件大小部分较大(超过几十兆),所以今天的大部分时间是研究怎么破除上传的限制问题。知道23点以后才基本上解决。现将问题处…

PHP实现在对象之外访问其私有属性p

PHP实现在对象之外访问其私有属性p

私有属性,对象,属性,方法,问其,本文实例讲述了PHP实现在对象之外访问其私有属性private及保护属性protected的方法。分享给大家供大家参考,具体如下:public 表示全局的访问权限,类内部外部子类都可以访问;private表示私有的访问权限,只有本类内…

NodeJS创建最简单的HTTP服务器

NodeJS创建最简单的HTTP服务器

服务器,最简单,电脑软件,NodeJS,HTTP,☆ 引子var http = require('http');http.createServer(function(request, response){ response.writeHead(200, { 'Content-Type': 'text-plain' }); response.end('Hello World\n');}).li…

jQuery实现html table行Tr的复制、

jQuery实现html table行Tr的复制、

计算,删除,功能,电脑软件,html,本文实例讲述了jQuery实现html table行Tr的复制、删除、计算功能。分享给大家供大家参考,具体如下:添加行:function addtr(){ var tr = $("#tb tr").eq(0).clone(); tr.appendTo("#tb"); //tr.insertB…

vue2.0 自定义日期时间过滤器

vue2.0 自定义日期时间过滤器

自定义,过滤器,日期时间,电脑软件,方法一:// template{{a | data}}//scriptdata:{ a: Date.now()}filters: { data:function (input) { var d = new Date(input); var year = d.getFullYear(); var month = d.getMonth() + 1; …