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


Posted in jQuery onAugust 29, 2017

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 实现鼠标画框并对框内数据选中的实例代码

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

jQuery 相关文章推荐
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
jQuery日期范围选择器附源码下载
May 23 jQuery
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 jQuery
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
JQuery常用选择器功能与用法实例分析
Dec 23 jQuery
jQuery+ajax实现用户登录验证
Sep 13 jQuery
jQuery实现锚点向下平滑滚动特效示例
Aug 29 #jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 #jQuery
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 #jQuery
解决IE7中使用jQuery动态操作name问题
Aug 28 #jQuery
jQuery菜单实例(全选,反选,取消)
Aug 28 #jQuery
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 #jQuery
详解webpack3如何正确引用并使用jQuery库
Aug 26 #jQuery
You might like
一些星际专用术语解释
2020/03/04 星际争霸
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
python 解压pkl文件的方法
2018/10/25 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
文明礼仪小标兵事迹
2014/01/12 职场文书
个人投资计划书
2014/05/01 职场文书
贷款担保书范文
2014/05/13 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery