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 相关文章推荐
jquery 入门教程 [翻译] 推荐
Aug 17 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
May 25 Javascript
jQuery的学习步骤
Feb 23 Javascript
倒记时60刷新网页的js代码
Feb 18 Javascript
jQuery中append()方法用法实例
Jan 08 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 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
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
浅析Prototype的模板类 Template
2011/12/07 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python中print和return的作用及区别解析
2019/05/05 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
Python画图高斯分布的示例
2019/07/10 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
函授毕业生自我鉴定范文
2014/03/25 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
SSM VUE Axios详解
2021/10/05 Vue.js
Windows7下FTP搭建图文教程
2022/08/05 Servers