当前位置: 首页 > Web前端 > HTML

原生js实现表格中鼠标框选,具有反选功能

时间:2023-04-02 23:57:15 HTML

今天应同学的要求,需要像Excel一样写一个框选高亮,实现框选区域的反选功能。要求用原生js来写,因为没有经验,看了很多资料,第一次写文章,不足之处还望大家指出!!上来先建表水果蔬菜苹果菠菜梨卷心菜葡萄胡萝卜PeachPotatoAppleSpinach省略下面十行...

样式<样式>正文{填充:0;保证金:0;溢出-y:隐藏;}.table{宽度:990px??;高度:850px;}.tabletr{高度:50px;溢出:滚动}.table-container{位置:绝对;顶部:0;左:200px;高度:750px;宽度:990px??;溢出-y:滚动;溢出-x:隐藏;e{背景颜色:#BDE4F4;}.fileDiv{背景颜色:#FEFF89;}.seled{边框:1px纯红色;背景色:#D6DFF7;}效果重头戏js部分开始varallpro2=[];变量索引=0;window.onload=function(){document.onmousedown=function(){varevt=window.event||参数[0];varstartX=(evt.x||evt.clientX);varstartY=(evt.y||evt.clientY);如果(startX>220&&startX<1210){varselList=[];varfileNodes=document.getElementsByTagName("tr");对于(vari=0;i0){//判断初始滚动条是否为0是否添加滚动条高度设置判断值varistrue=true;}paint(yheight,selList,startX,startY,istrue);}}};函数paint(yheight,selList,startX,startY,istrue){varisSelect=true;varselDiv=document.createElement("div");selDiv.style.cssText="position:absolute;width:0px;height:0px;font-size:0px;margin:0px;padding:0px;border:1pxdashed#0099FF;background-color:#C3D5ED;z??-index:1000;过滤器:alpha(不透明度:60);不透明度:0.6;显示:无;";selDiv.id="selectDiv";文档.body.appendChild(selDiv);selDiv.style.left=startX+"px";selDiv.style.top=startY+"px";var_x=null;变量_y=空;document.onmousemove=function(){evt=window.event||参数[0];如果(isSelect){如果(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";}};document.onmouseup=function(){if(selDiv){if(istrue){selDiv.style.height=Math.abs(_y-startY)+"px";selDiv.style.top=Math.min(_y,startY)+yheight.scrollTop+"px";}else{selDiv.style.height=Math.abs(_y-startY)+yheight.scrollTop+"px";}var_l=selDiv.offsetLeft,_t=selDiv.offsetTop;var_w=selDiv.offsetWidth,_h=selDiv.offsetHeight;对于(vari=0;i_l&&st>_t&&selList[i].offsetLeft<_l+_w&&selList[i].offsetTop<_t+_h){如果(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";}}}}isSelect=false;如果(selDiv){document.body.removeChild(selDiv);showSelDiv(selList);}revs1();selList=null,_x=null,_y=null,selDiv=null,startX=null,startY=null,evt=null;}}functionshowSelDiv(arr){//确定选择中范围更新数组allpro2for(vari=0;i0){for(vari=0;i