Javascript实现鼠标框选操作  不是点击选取


Posted in Javascript onApril 14, 2016

本文实例为大家分享了Javascript实现鼠标框选操作,绝不是点击选取,供大家参考,具体内容如下

效果图:

Javascript实现鼠标框选操作  不是点击选取

代码:

<html> 
<head></head> 
<style> 
body{padding:100px;} 
.fileDiv{float:left;width:100px;height:100px;text-align:center;line-height:100px;font-size:12px;border:1px solid #ccc;margin-right:10px;margin-bottom:10px;} 
.seled{border:1px solid red;background-color:#D6DFF7;} 
</style> 
<script type="text/javascript">  
(function() { 
  document.onmousedown = function() { 
 
    var selList = []; 
    var fileNodes = document.getElementsByTagName("div"); 
    for ( var i = 0; i < fileNodes.length; i++) { 
      if (fileNodes[i].className.indexOf("fileDiv") != -1) { 
        fileNodes[i].className = "fileDiv"; 
        selList.push(fileNodes[i]); 
      } 
    } 
 
    var isSelect = true; 
    var evt = window.event || arguments[0]; 
    var startX = (evt.x || evt.clientX); 
    var startY = (evt.y || evt.clientY); 
    var selDiv = document.createElement("div"); 
    selDiv.style.cssText = "position:absolute;width:0px;height:0px;font-size:0px;margin:0px;padding:0px;border:1px dashed #0099FF;background-color:#C3D5ED;z-index:1000;filter:alpha(opacity:60);opacity:0.6;display:none;"; 
    selDiv.id = "selectDiv"; 
    document.body.appendChild(selDiv); 
 
    selDiv.style.left = startX + "px"; 
    selDiv.style.top = startY + "px"; 
 
    var _x = null; 
    var _y = null; 
    clearEventBubble(evt); 
 
    document.onmousemove = function() { 
      evt = window.event || arguments[0]; 
      if (isSelect) { 
        if (selDiv.style.display == "none") { 
          selDiv.style.display = ""; 
        } 
        _x = (evt.x || evt.clientX); 
        _y = (evt.y || evt.clientY); 
        selDiv.style.left = Math.min(_x, startX) + "px"; 
        selDiv.style.top = Math.min(_y, startY) + "px"; 
        selDiv.style.width = Math.abs(_x - startX) + "px"; 
        selDiv.style.height = Math.abs(_y - startY) + "px"; 
 
        // ---------------- 关键算法 ---------------------  
        var _l = selDiv.offsetLeft, _t = selDiv.offsetTop; 
        var _w = selDiv.offsetWidth, _h = selDiv.offsetHeight; 
        for ( var i = 0; i < selList.length; i++) { 
          var sl = selList[i].offsetWidth + selList[i].offsetLeft; 
          var st = selList[i].offsetHeight + selList[i].offsetTop; 
          if (sl > _l && st > _t && selList[i].offsetLeft < _l + _w && selList[i].offsetTop < _t + _h) { 
            if (selList[i].className.indexOf("seled") == -1) { 
              selList[i].className = selList[i].className + " seled"; 
            } 
          } else { 
            if (selList[i].className.indexOf("seled") != -1) { 
              selList[i].className = "fileDiv"; 
            } 
          } 
        } 
 
      } 
      clearEventBubble(evt); 
    } 
 
    document.onmouseup = function() { 
      isSelect = false; 
      if (selDiv) { 
        document.body.removeChild(selDiv); 
        showSelDiv(selList); 
      } 
      selList = null, _x = null, _y = null, selDiv = null, startX = null, startY = null, evt = null; 
    } 
  } 
})(); 
function clearEventBubble(evt) { 
  if (evt.stopPropagation) 
    evt.stopPropagation(); 
  else 
    evt.cancelBubble = true; 
  if (evt.preventDefault) 
    evt.preventDefault(); 
  else 
    evt.returnValue = false; 
} 
function showSelDiv(arr) { 
  var count = 0; 
  var selInfo = ""; 
  for ( var i = 0; i < arr.length; i++) { 
    if (arr[i].className.indexOf("seled") != -1) { 
      count++; 
      selInfo += arr[i].innerHTML + "\n"; 
    } 
  } 
  alert("共选择 " + count + " 个文件,分别是:\n" + selInfo); 
} 
</script> 
<body> 
  <div class="fileDiv">file1</div> 
  <div class="fileDiv">file2</div> 
  <div class="fileDiv">file3</div> 
  <div class="fileDiv">file4</div> 
  <div class="fileDiv">file5</div> 
  <div class="fileDiv">file6</div> 
  <div class="fileDiv">file7</div> 
  <div class="fileDiv">file8</div> 
  <div class="fileDiv">file9</div> 
 
</body> 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 Javascript
JS+CSS实现的经典tab选项卡效果代码
Sep 16 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
Vue中img的src属性绑定与static文件夹实例
May 18 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
Jun 22 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
Aug 03 Javascript
Node.js实现数据推送
Apr 14 #Javascript
node.js实现端口转发
Apr 14 #Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 #Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 #Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 #Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 #Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 #Javascript
You might like
将数组写入txt文件 var_export
2009/04/21 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python中文编码那些事
2014/06/25 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
学院书画协会部门职责
2013/11/28 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
门店业绩提升方案
2014/06/08 职场文书
怎么用Python识别手势数字
2021/06/07 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库