最近做了一个用js实现鼠标拖拽多选的功能,于是整理了一下思路,写了一个小demo:

遮罩出现:

被遮罩盖住的,即为选中的块(背景色为粉色)

下面是具体代码,注释已在文中,与大家交流。

鼠标拖拽多选功能

*{

box-sizing:border-box;

}

ul{

width:500px;

height:auto;

margin:0;

padding:20px;

font-size: 0;

/*需设置定位*/

position:relative;

}

li{

width:70px;

height:70px;

margin:10px;

padding:0;

display:inline-block;

vertical-align: top;

font-size: 13px;

border:1px solid #d9d9d9;

}

#moveSelected{

position:absolute;

background-color: blue;

opacity:0.3;

border:1px dashed #d9d9d9;

top:0;

left:0;

}

.selected{

background-color: pink;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

$(document).ready(function(){

let moveSelected=$('#moveSelected')[0];

let flag=false;//是搜开启拖拽的标志

let oldLeft=0;//鼠标按下时的left,top

let oldTop=0;

let selectedList=[];//拖拽多选选中的块集合

// 鼠标按下时开启拖拽多选,将遮罩定位并展现

$(".list").mousedown(function(event) {

flag=true;

moveSelected.style.top=event.pageY+'px';

moveSelected.style.left=event.pageX+'px';

oldLeft=event.pageX;

oldTop=event.pageY;

event.preventDefault(); // 阻止默认行为

event.stopPropagation(); // 阻止事件冒泡

});

// 鼠标移动时计算遮罩的位置,宽 高

$(".list").mousemove(function(event) {

if(!flag) return;//只有开启了拖拽,才进行mouseover操作

if(event.pageX

moveSelected.style.left=event.pageX+'px';

moveSelected.style.width=(oldLeft-event.pageX)+'px';

}else{

moveSelected.style.width=(event.pageX-oldLeft)+'px';

}

if(event.pageY

moveSelected.style.top=event.pageY+'px';

moveSelected.style.height=(oldTop-event.pageY)+'px';

}else{

moveSelected.style.height=(event.pageY-oldTop)+'px';

}

event.preventDefault(); // 阻止默认行为

event.stopPropagation(); // 阻止事件冒泡

});

//鼠标抬起时计算遮罩的right 和 bottom,找出遮罩覆盖的块,关闭拖拽选中开关,清除遮罩数据

$(".list").mouseup(function(event) {

moveSelected.style.bottom=Number(moveSelected.style.top.split('px')[0])+Number(moveSelected.style.height.split('px')[0]) + 'px';

moveSelected.style.right=Number(moveSelected.style.left.split('px')[0])+Number(moveSelected.style.width.split('px')[0])+'px';

findSelected();

flag=false;

clearDragData();

event.preventDefault(); // 阻止默认行为

event.stopPropagation(); // 阻止事件冒泡

});

$(".list").mouseleave(function(event) {

flag=false;

moveSelected.style.width=0;

moveSelected.style.height=0;

moveSelected.style.top=0;

moveSelected.style.left=0;

event.preventDefault(); // 阻止默认行为

event.stopPropagation(); // 阻止事件冒泡

});

function findSelected(){

let blockList=$('.list').find('li');

for(let i=0;i

//计算每个块的定位信息

let left=$(blockList[i]).offset().left;

let right=$(blockList[i]).width()+left;

let top=$(blockList[i]).offset().top;

let bottom=$(blockList[i]).height()+top;

//判断每个块是否被遮罩盖住(即选中)

let leftFlag=moveSelected.style.left.split('px')[0]<=left && left<=moveSelected.style.right.split('px')[0];

let rightFlag=moveSelected.style.left.split('px')[0]<=right && right<=moveSelected.style.right.split('px')[0];

let topFlag=moveSelected.style.top.split('px')[0]<=top && top<=moveSelected.style.bottom.split('px')[0];

let bottomFlag=moveSelected.style.top.split('px')[0]<=bottom && bottom<=moveSelected.style.bottom.split('px')[0];

if((leftFlag || rightFlag) && (topFlag || bottomFlag)){

selectedList.push(blockList[i]);

$(blockList[i]).addClass('selected');

}

}

console.log(selectedList);

}

function clearDragData(){

moveSelected.style.width=0;

moveSelected.style.height=0;

moveSelected.style.top=0;

moveSelected.style.left=0;

moveSelected.style.bottom=0;

moveSelected.style.right=0;

}

});

html 复选框拖拽多选,js实现鼠标拖拽多选功能相关推荐

  1. html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...

    JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例 发布时间:2020-10-04 12:47:25 来源:脚本之家 阅读:121 作者:s_psycho 本文实例讲述了JS实现鼠标拖拽盒子移动及右键 ...

  2. vue复选框默认被选中_vue .js绑定checkbox并获取、改变选中状态的实例

    vue .js绑定checkbox并获取.改变选中状态的实例 2019-01-07 编程之家收集整理的这篇文章主要介绍了vue .js绑定checkbox并获取.改变选中状态的实例,编程之家小编觉得挺 ...

  3. JS中鼠标拖拽div(2)(setCapture()方法和releaseCapture()方法)

    接着鼠标拖拽div(1)解决问题,当在拖拽事件所在的页面按下键盘的ctrl+A全选后,再去拖拽div,浏览器会默认去搜索网页中的内容,拖拽功能就会失效,(搜索网页内容是浏览器的默认行为,所以要想不发生 ...

  4. html div 可鼠标滚动,js实现鼠标拖拽div左右滑动

    本文实例为大家分享了js鼠标拖拽div左右滑动的具体代码,供大家参考,具体内容如下 Title body{ position: relative; margin:0; padding:0; width ...

  5. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

  6. html矢量图 对画布的拖拽,原生WebGL如何使用鼠标拖拽画布?

    如图,我在实现鼠标拖拽画布这个功能时拖拽动作非常不平滑,请问有没有更好的方式用原生WebGL来实现鼠标拖拽画布功能? 拖拽部分代码:gl.canvas.onmousedown = function ( ...

  7. 用鼠标左右拖拽 html,js实现鼠标拖拽div左右滑动

    本文实例为大家分享了js鼠标拖拽div左右滑动的具体代码,供大家参考,具体内容如下 Title body{ position: relative; margin:0; padding:0; width ...

  8. JS中鼠标拖拽div(onmousedown、onmousemove、onmouseup)

    onmousedown:鼠标的按下事件 onmouseove:鼠标的移动事件 onmouseup:鼠标的松开事件 思路: 想实现鼠标拖拽div移动的效果,就得先获取到div,然后给div绑定鼠标按下的 ...

  9. 纯js实现鼠标拖尾效果(好玩又简单,一学就会)

    js特效-鼠标滑动的拖尾效果 <script>//鼠标移动事件(document范围内移动)document.onmousemove=function(event){//1.创建divva ...

最新文章

  1. REST接口GET方法获取文件保存到本地(C#)
  2. Django框架(9.Django中的配置使用MySQL数据库以及页面重定向)
  3. easy-ui表单校验---针对单个字段,多重校验(有参数校验+无参数检验)
  4. springmvc登陆示例(非注解)
  5. 洛谷——P1540 机器翻译
  6. 2018双十一苏宁20+篇技术干货全整理
  7. Apache yarn入门介绍
  8. 小程序开发:python sanic 实现小程序登录注册
  9. linux下升级mysql_linux下mysql升级
  10. jsonrpc(jsonrpc4j)demo
  11. ABP框架的理解和总结
  12. windows11连接无线网后分享热点连接不上
  13. Aras Innovator: 扩展Part类型,管理更多的物体类型
  14. 串口接收完整一帧数据包的3种方法
  15. matlab 冒号,MATLAB冒号符号
  16. 项目经理工具之Microsoft Project(MSP)
  17. 【VUE】微商城(七)----实现分类页面功能
  18. oracle wallet无密码认证,Oracle Wallet 无密码登录
  19. I \ Q信号、IFI \ IFQ信号、差分信号、单端信号知识总结
  20. 用计算机算cos1,cos1等于多少怎么算

热门文章

  1. 喷雾破碎模型整理(更新中)
  2. 室内精准定位市场大洗牌,蓝牙定位是否会成为主流?
  3. 关于星号(**/*.java)
  4. 电商平台对接系统设计
  5. php遍历数组替换内容,PHP使用数组依次替换字符串中匹配项
  6. 一秒换一张图 以及checkbox全选函数
  7. Linux下使用Java调用Hikvision设备网络SDK使用指南
  8. 2021年云南省迪庆高考成绩查询,快来查!2020年云南省高考成绩查询入口-云南招考频道...
  9. java poi居中_使用apache poi在合并单元格中水平居中图像
  10. android 开发 电台,Android 开发自己的网络收音机3——电台分类(ExpandableListView)