zoukankan      html  css  js  c++  java
  • html 绘制矩形轨迹,选中区域

    网格4*4,每个网格中存在小网格为8*8 

    支持从左上角拖拽选中,以及右下角拖拽选中

    导出的数据含义,从右下角8*8网格开始每列自上向下,从左到右,

    对于4*4网格,如图一顺序

     code

    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="UTF-8">
      <meta name="Generator" content="EditPlus®">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <title>Document</title>
      <style>
    .box1{
         380px;
         position: fixed;
         z-index:30;
         border:1px solid #ccc;
         left:0;
         right:0;
         margin:36% auto auto auto;
         background-color:#fff;
         padding:6px;
        }
    .closeBtn{
      float:right;
      margin-right:3%;
      cursor: pointer;
    }
    .title{
      height: 20px;
    }
    p{
    padding:3px;
    border-top:1px solid #ccc;
    word-break:normal;
    white-space:pre-warp;
    word-wrap:break-word;
    }
     #active_box{
        border:1px solid black;
         0px;
        height: 0px;
        position: absolute;
        z-index:-10;
      }
      table{
      border-style: ridge;
      position: positive;
      opacity:0.75;
      display:inline;
      border-collapse:collapse;
      }
      table:hover{
        cursor:pointer;
      }
      td
      {
      border: 1px solid black;
      }
      #d{
      float:right;
      }
      #p{
      float:left;
      }
      #tablelist{
      opacity:1;
      88%;
      margin-left:6%;
      }
      .white{
      background-color:#ffffff;
      }
      .yellow{
      background-color:#FFFF00;
      border-radius:50%;
      }
      #ddiv{
      opacity:1;
      z-index:-5;
      }
      button:hover{
        cursor:pointer;
      }
    input:hover{
        cursor:pointer;
    }
    .control{
        text-align: center;
        text-decoration: none;
        background-color: #4CAF50; /* Green */
        border: none;
        color: white;
        border-radius: 2px;
        margin:1%;
    }
      </style>
      <script>
      var is_down=0;
      var down_id="";
      var up_id="";
      var startX, startY;
      var is_follow=0;
      var isExist=null;
    // 鼠标移动
    function mousemove(e){
        if(is_down){
             // 更新 box 尺寸
            if(document.getElementById("active_box") !== null) {
                var ab = document.getElementById("active_box");
                if(e.pageX>startX){
                    if(e.pageY>startY){
                        ab.style.top = startY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else if(e.pageY==startY){
                        ab.style.top = startY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else{
                        ab.style.top = e.pageY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }
                }else if(e.pageX==startX){
                    if(e.pageY>startY){
                        ab.style.top = startY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else if(e.pageY==startY){
                        ab.style.top = startY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else{
                        ab.style.top = e.pageY + 'px';
                        ab.style.left = startX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }
                }else{
                    if(e.pageY>startY){
                        ab.style.top = startY + 'px';
                        ab.style.left = e.pageX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else if(e.pageY==startY){
                        ab.style.top = e.pageY + 'px';
                        ab.style.left = e.pageX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }else{
                        ab.style.top = e.pageY + 'px';
                        ab.style.left = e.pageX + 'px';
                        ab.style.width = Math.abs(e.pageX - startX) + 'px';
                        ab.style.height = Math.abs(e.pageY - startY) + 'px';
                    }  
                }      
            }
        }else{
            if(document.getElementById("active_box") !== null){
                var ab = document.getElementById("active_box");
                document.body.removeChild(ab);      
            }
        }
    }
    function mouseDown(e,d)
    {
        down_id=e.id;
        startX = d.pageX;
        startY = d.pageY;
        // 在页面创建 box
        var active_box = document.createElement("div");
        active_box.id = "active_box";
        active_box.className = "box";
        document.body.appendChild(active_box);
        active_box.style.top = startY + 'px';
        active_box.style.left = startX + 'px';
        active_box = null;
        is_down=1;
    }
    function mouseUp(e,d)
    {
        is_down=0;
        if(document.getElementById("active_box") !== null){
                var ab = document.getElementById("active_box");
                document.body.removeChild(ab);      
        }
        up_id=e.id;
        tname_up=up_id.split(",")[0];
        tname_down=down_id.split(",")[0];
        x_up=parseInt(up_id.split(",")[1]);
        y_up=parseInt(up_id.split(",")[2]);
        x_down=parseInt(down_id.split(",")[1]);
        y_down=parseInt(down_id.split(",")[2]);
        if(down_id==up_id){
            if(tname_up==tname_down&&tname_up=="p"){
                //console.log("p");
                if(e.className=="white"){
                    a=document.getElementById("p,"+x_up+","+y_up);
                    a.className = "yellow";
                    if(is_follow){
                        b=document.getElementById("d,"+x_down+","+y_down);
                        b.className = "yellow";
                    }  
                }else{
                    a=document.getElementById("p,"+x_up+","+y_up);
                    a.className = "white";
                    if(is_follow){
                        b=document.getElementById("d,"+x_down+","+y_down);
                        b.className = "white";
                    }
                }
            }else if(tname_up==tname_down&&tname_up=="d"){
                if(e.className=="white"){
                    a=document.getElementById("d,"+x_up+","+y_up);
                    a.className = "yellow";
                    if(is_follow){
                        b=document.getElementById("p,"+x_down+","+y_down);
                        b.className = "yellow";
                    }
                }else{
                    a=document.getElementById("d,"+x_up+","+y_up);
                    a.className = "white";
                    if(is_follow){
                        b=document.getElementById("p,"+x_down+","+y_down);
                        b.className = "white";
                    }
                }
            }
        }else{
            if(y_up>y_down){
                if(x_up>=x_down){
                    for(i=x_down;i<=x_up;i++){
                        for(j=y_down;j<=y_up;j++){
                            //console.log("p,"+i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "yellow";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "yellow";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "yellow";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "yellow";
                                }
                            }
                        }
                    }          
                }else {
                    for(i=x_up;i<=x_down;i++){
                        for(j=y_down;j<=y_up;j++){
                            //console.log(i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "white";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "white";
                                }
                            }
                        }   
                    }          
                }
            }else if(y_up==y_down){
                if(x_up>x_down){
                    for(i=x_down;i<=x_up;i++){
                        for(j=y_down;j<=y_up;j++){
                            //console.log(i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "yellow";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "yellow";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "yellow";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "yellow";
                                }
                            }
                        }
                    }          
                }else {
                    for(i=x_up;i<=x_down;i++){
                        for(j=y_down;j<=y_up;j++){
                            //console.log(i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "white";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "white";
                                }
                            }
                        }   
                    }          
                }
            }else{
                if(x_up>=x_down){
                    for(i=x_down;i<=x_up;i++){
                        for(j=y_up;j<=y_down;j++){
                            //console.log(i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "white";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "white";
                                }
                            }
                        }
                    }          
                }else{
                    for(i=x_up;i<=x_down;i++){
                        for(j=y_up;j<=y_down;j++){
                            //console.log(i+","+j);
                            if(tname_up==tname_down&&tname_up=="p"){
                                a=document.getElementById("p,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("d,"+i+","+j);
                                    b.className = "white";
                                }
                            }else if(tname_up==tname_down&&tname_up=="d"){
                                a=document.getElementById("d,"+i+","+j);
                                a.className = "white";
                                if(is_follow){
                                    b=document.getElementById("p,"+i+","+j);
                                    b.className = "white";
                                }
                            }
                        }
                    }          
                }
            }
        }
    }
    function load(){
        var follow_Obj = document.getElementById("follow");
        follow_Obj.checked = true;
        is_follow=1;
        document.getElementById("EleIdr").style.display="none";
    }
    function change(obj){
        if (obj.checked == true){
            is_follow=1;
            document.getElementById("EleIdr").style.display="none";
        }
        else{
            is_follow=0;
            document.getElementById("EleIdr").style.display="inline";
        }
    }
    function emp(){
        for(i=0;i<32;i++){
            for(j=0;j<32;j++){
                //console.log(i+","+j);
                a=document.getElementById("p,"+i+","+j);
                b=document.getElementById("d,"+i+","+j);
                a.className = "white";
                b.className = "white";
            }   
        }
    }
    function bin_to_hex(str) {
        let hex_array = [{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},
            {key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"},{key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"}]
        let value = ''
        let list=[]
        //console.log(str)
        if(str.length%4!==0){
            let a = "0000"
            let b=a.substring(0,4-str.length%4)
            str = b.concat(str)
        }
        //console.log(str)
        while (str.length > 4) {
            list.push(str.substring(0, 4))
            str = str.substring(4);
        }
        list.push(str)
        //console.log(list)
        for(let i=0;i<list.length;i++){
            for(let j=0;j<hex_array.length;j++){
                if(list[i]==hex_array[j].val){
                    value = value.concat(hex_array[j].key)
                    break
                }
            }
        }
        //console.log(value)
        return value
    }
    function output(e){
        var isExist = document.getElementById('boxId');
        var arrayObj = new Array();
        var ll=0;
        var pointcur=[24,24];
        if(e.id=="EleIdr"){
            for(i=0;i<4;i++){
                if(ll==0){
                    for(j=0;j<4;j++){
                          for(n=pointcur[1];n<pointcur[1]+8;n++){
                              var arraytmp = new Array();
                              for(m=pointcur[0];m<pointcur[0]+8;m++){
                                    //console.log(m,n);
                                    d=document.getElementById('d,'+m+","+n);
                                    if(d.className =="white"){
                                        arraytmp.push(0);
                                    }else{
                                        arraytmp.push(1);
                                    }
                              }
                              hex=bin_to_hex(arraytmp.join(""));
                              //console.log(hex);
                              arrayObj.push("0x"+hex);
                          }
                    if(j!=3){
                        pointcur[0]=pointcur[0]-8;
                    }
                    }
                ll=1;
                pointcur[1]=pointcur[1]-8;
                }else{
                    for(j=0;j<4;j++){
                          for(n=pointcur[1];n<pointcur[1]+8;n++){
                              var arraytmp = new Array();
                              for(m=pointcur[0];m<pointcur[0]+8;m++){
                                    //console.log(m,n);
                                    d=document.getElementById('d,'+m+","+n);
                                    if(d.className =="white"){
                                        arraytmp.push(0);
                                    }else{
                                        arraytmp.push(1);
                                    }
                              }
                              hex=bin_to_hex(arraytmp.join(""));
                              arrayObj.push("0x"+hex);
                          }
                    if(j!=3){
                        pointcur[0]=pointcur[0]+8;
                    }
                    }
                ll=0;
                pointcur[1]=pointcur[1]-8;
                }
            }
        }else{
            for(i=0;i<4;i++){
                if(ll==0){
                    for(j=0;j<4;j++){
                          for(n=pointcur[1];n<pointcur[1]+8;n++){
                              var arraytmp = new Array();
                              for(m=pointcur[0];m<pointcur[0]+8;m++){
                                    //console.log(m,n);
                                    d=document.getElementById('p,'+m+","+n);
                                    if(d.className =="white"){
                                        arraytmp.push(0);
                                    }else{
                                        arraytmp.push(1);
                                    }
                              }
                              hex=bin_to_hex(arraytmp.join(""));
                              arrayObj.push("0x"+hex);
                          }
                    if(j!=3){
                        pointcur[0]=pointcur[0]-8;
                    }
                    }
                ll=1;
                pointcur[1]=pointcur[1]-8;
                }else{
                    for(j=0;j<4;j++){
                          for(n=pointcur[1];n<pointcur[1]+8;n++){
                              var arraytmp = new Array();
                              for(m=pointcur[0];m<pointcur[0]+8;m++){
                                    //console.log(m,n);
                                    d=document.getElementById('p,'+m+","+n);
                                    if(d.className =="white"){
                                        arraytmp.push(0);
                                    }else{
                                        arraytmp.push(1);
                                    }
                              }
                              hex=bin_to_hex(arraytmp.join(""));
                              arrayObj.push("0x"+hex);
                          }
                    if(j!=3){
                        pointcur[0]=pointcur[0]+8;
                    }
                    }
                ll=0;
                pointcur[1]=pointcur[1]-8;
                }
            }
        }
          //判断是否存在,防止重复添加
          if( undefined == isExist || null == isExist ){
            text="";
            for (i = 0; i < arrayObj.length; i++) {
                 text += arrayObj[i] + ",";
                 if((i+1)%8==0){
                    text +="<br>";
                 }
            }
            //生成一个div
            var boxDiv = document.createElement('div');
            boxDiv.className = 'box1'; //添加我们自定义的样式
            boxDiv.id = 'boxId'; //给这个DIV添加一个ID,便于删除
            boxDiv.innerHTML = "<div class='title'><span class='closeBtn' onclick='removeDiv()'>关闭</span></div><p>"+text+"</p>";
            document.body.appendChild(boxDiv);
        }
    }
        //移除DIV事件
    function removeDiv(){
        var boxDiv =  document.getElementById('boxId');
        document.body.removeChild(boxDiv);    
    }
      </script>
     </head>
     <body ondragstart = "return false;" onload="load()">
     <script>
     var winHeight=0;
     var winWidth=0;
     if(window.innerHeight){
        winHeight = window.innerHeight;
        }
    else if((document.body) && (document.body.clientHeight)){
    winHeight = document.body.clientHeight;
    }
     if(window.innerWidth){
        winWidth = window.innerWidth;
        }
    else if((document.body) && (document.body.clientWidth)){
    winWidth = document.body.clientWidth;
    }
    th_width=Math.ceil(0.45*(winHeight-14)/32);
    document.write("<div id='tablelist'"+">")
    document.write("<table id ='p'"+" onmousemove='mousemove(event)'"+">")
      for (i = 0; i <32; i++){
        document.write("<tr class='p,"+i+"'>")
        for(j=0;j<32;j++){
                document.write("<td id='p,"+i+","+j+"' "+"width="+th_width+" "+"height="+th_width+" class='white'"+" onmousedown='mouseDown(this,event)'"+" onmouseup='mouseUp(this,event)'"+"></td>")
        }
        document.write("</tr>")
        }
        for (i = 0; i <32; i++){
            for (j = 0; j <32; j++){
                if(i==7){
                    document.getElementById('p,'+i+","+j).style.borderBottom="1.2px solid #FF00FF";
                }else if(j==7){
                    document.getElementById('p,'+i+","+j).style.borderRight="1.2px solid #FF00FF";
                }else if(i==15){
                    document.getElementById('p,'+i+","+j).style.borderBottom="1.51px solid #FF00FF";
                }else if(j==15){
                    document.getElementById('p,'+i+","+j).style.borderRight="1.51px solid #FF00FF";
                }else if(j==23){
                    document.getElementById('p,'+i+","+j).style.borderRight="1.2px solid #FF00FF";
                }else if(i==23){
                    document.getElementById('p,'+i+","+j).style.borderBottom="1.2px solid #FF00FF";
                }
            }
        }
        x=document.getElementById('p,'+7+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+7+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+7+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+15+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+15+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+15+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+23+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+23+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('p,'+23+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        document.write("</table>")
        document.write("<table id ='d'"+" onmousemove='mousemove(event)'"+">")
      for (i = 0; i <32; i++){
        document.write("<tr class='d,"+i+"'>")
        for(j=0;j<32;j++){
                document.write("<td id='d,"+i+","+j+"' "+"width="+th_width+" "+"height="+th_width+" class='white'"+" onmousedown='mouseDown(this,event)'"+" onmouseup='mouseUp(this,event)'"+"></td>")
        }
        document.write("</tr>")
        }
        for (i = 0; i <32; i++){
            for (j = 0; j <32; j++){
                if(i==7){
                    document.getElementById('d,'+i+","+j).style.borderBottom="1.2px solid #FF00FF";
                }else if(j==7){
                    document.getElementById('d,'+i+","+j).style.borderRight="1.2px solid #FF00FF";
                }else if(i==15){
                    document.getElementById('d,'+i+","+j).style.borderBottom="1.51px solid #FF00FF";
                }else if(j==15){
                    document.getElementById('d,'+i+","+j).style.borderRight="1.51px solid #FF00FF";
                }else if(j==23){
                    document.getElementById('d,'+i+","+j).style.borderRight="1.2px solid #FF00FF";
                }else if(i==23){
                    document.getElementById('d,'+i+","+j).style.borderBottom="1.2px solid #FF00FF";
                }
            }
        }
        x=document.getElementById('d,'+7+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+7+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+7+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+15+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+15+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+15+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+23+","+7);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+23+","+15);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        x=document.getElementById('d,'+23+","+23);
        x.style.cssText="border-right:1.2px solid #FF00FF;border-bottom:1.2px solid #FF00FF;";
        document.write("</table>")
        document.write("<input type='checkbox' id='follow' onclick='change(this)'/>follow")
        document.write("<button class='control' id='EleIdl' onclick='output(this)'>o_left</button>")
        document.write("<button class='control' id='EleIdr' onclick='output(this)'>o_right</button>")
        document.write("<button class='control' onclick='emp()'>clear</button>")
    document.write("</div>")
    </script>
    </body>
    </html>
  • 相关阅读:
    Eclipse 安装插件
    java 之 Spring 框架(Java之负基础实战)
    tomcat 修改网站路径(Java之负基础实战)
    tomcat 修改编码(Java之负基础实战)
    tomcat 修改端口(Java之负基础实战)
    linux vi 操作
    解压文件--linux
    smarty用法
    thinkphp调试手段
    kindeditor上传文件的使用
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9665672.html
Copyright © 2011-2022 走看看