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 相关文章推荐
JS模拟多线程
Feb 07 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
web前端设计师们常用的jQuery特效插件汇总
Dec 07 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
原生js实现水平方向无缝滚动
Jan 10 Javascript
记一次webpack3升级webpack4的踩坑经历
Jun 12 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
使用Bootstrap做一个朝代历史表
Dec 10 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
学习YUI.Ext 第三天
2007/03/10 Javascript
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
详解React 条件渲染
2020/07/08 Javascript
tornado 多进程模式解析
2018/01/15 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
毕业生医学检验求职信
2013/10/16 职场文书
总经理助理的职责
2014/03/14 职场文书
学习雷锋活动总结
2014/04/29 职场文书
2015年教师教学工作总结
2015/04/28 职场文书