`
wangzjie
  • 浏览: 74752 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js 鼠标画矩形选择区域

阅读更多

今天一直在纠结JS画矩形,找了很多资料,终于找到个像样点的了,自己改了点,不过还存在一些问题

<form name="myForm" action="exportToExcel" method="POST">

 <div style="position:absolute;top:1260px;left:400px;z-index:-1;">
     <input type="button" value="select" onclick="beginSelect()"
      name="select" />
     <input type="button" value="export" onclick="get()" name="export" />
     <input type="hidden" name="textDatas">
    </div>

   </form>

  </div>

  <iframe name=saveWin height=0 width=0></iframe>
  <div id="ld" class="area" style="filter: Alpha(Opacity=60)"></div>
 </body>
 <script language='javascript'>
var value = "";
int index=0;


//矩形选择区域
var client_x = 0;
var client_y = 0;
var bLeftDown = false;
var bSelected =false;
var bClick = false;

//存矩形选择区域
var tempX1=0;
var tempY1=0;
var tempX2=0;
var tempY2=0;
//将像素字符串转成int
function changePixelToInt(pixel){
 var str = pixel;
 return parseInt(str.substring(0,str.indexOf("px")));
}

 

//这里是得到所选矩形区域内的所有文本框值

function get(){
    if(!bSelected)
       {
    window.alert("请选择要导出的区域!");
    return;
    }
    //获得矩形选择区域坐标
     tempX1=changePixelToInt(ld.style.left);
     tempY1=changePixelToInt(ld.style.top);
       tempX2=tempX1+changePixelToInt(ld.style.width);
     tempY2=tempY1+changePixelToInt(ld.style.height);
  
        var texts = document.myForm.elements;
       for(var i = 0; i < texts.length; i ++){
            if(texts[i].type == 'text'){
             getAbsPoint(texts[i]);
            }
        }

       document.myForm.textDatas.value=value;//将文本框信息赋给POST
        init();
        document.myForm.submit();
}
//获得文本框信息
function   getAbsPoint(obj)     
{     
   var   x,y;     
   var oRect   =   obj.getBoundingClientRect();     
 x=oRect.left +document.body.scrollLeft  ;  
 y=oRect.top  +document.body.scrollTop ;  
 

//判断是否在所选区域内
 if(Math.max(x,tempX1)>=Math.min(x+obj.offsetWidth,tempX2) || Math.max(y,tempY1)>=Math.min(y+obj.offsetHeight,tempY2)){
    //两个矩形不相交,则不在所选区域内,退出
    return;
 }
 //文本框信息用#分开
    var s = index+"#"+obj.value+"#"+x+"#"+y+"#"+obj.offsetWidth+"#"+obj.offsetHeight;
 value +=s;
 value+="!";  //将各文本框组合成长串
 index++;
}  
//初始化
function init(){
   bSelected = false;
   document.myForm.select.value="select";
   ld.style.width  = 0;
   ld.style.height = 0;
   ld.style.left   = client_x;
   ld.style.top    = client_y;
   ld.style.visibility = "hidden";
   bClick = false;
   tempX1=0;
   tempY1=0;
   tempX2=0;
   tempY2=0;
   value = "";
}

//是否变成可选择状态

function beginSelect(){
   var value = document.myForm.select.value;
   if(value=="select"){
     bSelected = true;
     document.myForm.select.value="cancel";
 }
 else{
 bSelected = false;
     document.myForm.select.value="select";
 }
}
//随鼠标运动的更改函数
function resize()
{     
      if(bSelected){
       if(bLeftDown){
       if(bClick){
        ld.style.width  = 0;
        ld.style.height = 0;
        ld.style.left   = client_x;
        ld.style.top    = client_y;
        ld.style.visibility = "visible";
        bClick = false;
        }
       
        var scroll_left = document.body.scrollLeft;
        var scroll_top  = document.body.scrollTop;
        var new_x   = event.clientX + scroll_left;
        var new_y   = event.clientY + scroll_top;
 
        //swordmaple javascript article @jx165.com
        //by im286 yeye
        //取得当前鼠标位置
        if (new_y>=client_y) temp_height = new_y  - client_y;
        else {
                temp_height   = client_y  - new_y;
                ld.style.top  = new_y;
        }
        //如果上下移动
        if (new_x>=client_x)  temp_width = new_x  - client_x;
        else {
                temp_width = client_x  - new_x;
                ld.style.left   = new_x;
        }
        //如果左右移动
        ld.style.width  = temp_width;
        ld.style.height = temp_height;
        //重设层的宽度及位置
        return false;
  }}
}
//点击鼠标重设
function reset()
{    
      if(bSelected){
       if(event.button == 1)
     bLeftDown = true;
       if(bLeftDown){
      bClick = true;
    client_x        = event.clientX + document.body.scrollLeft;
        client_y        = event.clientY + document.body.scrollTop;   
   }
  }
        //初始定义层属性
}
//放开鼠标键操作
function mouseup(){
    bLeftDown = false;
}
document.onmousedown  = reset;
document.onmousemove  = resize;
document.onmouseup = mouseup;
</script>
</html>

分享到:
评论

相关推荐

    一个简单的JS画矩形代码

    综上所述,这个简单的JS画矩形代码利用了HTML5的`canvas`元素和其相关的绘图API,结合鼠标事件监听,实现了动态交互的矩形绘制功能。通过这个实例,我们可以更好地理解JavaScript在网页动态效果中的应用,并为进一步...

    jquery 图片上画矩形

    本教程将深入探讨如何使用jQuery实现一个功能,即在选定的图片上绘制带有颜色的矩形框,以便用户可以标记或选择图片的特定区域。这个功能常见于图像编辑工具、标注应用或者数据分析场景,通过获取XY轴坐标,可以精确...

    js 动态获取图片矩形热区,并在热区上添加蒙版,鼠标经过,以半透明形式显示该区域

    - 可以监听鼠标事件(如`mousedown`、`mousemove`和`mouseup`)来实现用户选择和拖动矩形区域。 - 使用`getBoundingClientRect()`方法获取元素的边界信息,用于计算鼠标位置和热区的关系。 4. **Canvas 绘制蒙版*...

    vue实现在图片中画矩形框,并得到对角坐标,设置map中area的样式.zip

    在Vue项目中实现图片上画矩形框并获取对角坐标以及设置`&lt;map&gt;`中的`&lt;area&gt;`样式,涉及到的技术主要包括JavaScript、HTML5的绘图API以及图像热区技术。接下来,我们将深入探讨这些知识点。 1. **JavaScript绘图API**...

    js实现鼠标拉框截图

    在JavaScript(简称JS)编程中,实现鼠标拉框截图是一项常见的功能,特别是在Web应用中,如在线编辑器、协作工具等。这个功能的核心是通过监听鼠标事件,结合HTML5的Canvas API来完成图像的选择和捕获。以下是实现这...

    vue实现在图片中画矩形框,并得到图片中的对角坐标,测试可用版本

    在Vue.js框架中实现图像上绘制矩形框并获取对角坐标的功能,是常见的图像处理需求,例如在图像标注、对象检测等应用场景中。本文将详细介绍如何在Vue项目中完成这个任务。 首先,我们需要了解Vue的基本概念。Vue.js...

    【JavaScript源代码】Vue使用鼠标在Canvas上绘制矩形.docx

    Vue使用鼠标在Canvas上绘制矩形  本文实例为大家分享了Vue使用鼠标在Canvas上绘制矩形的具体代码,供大家参考,具体内容如下 1.代码 &lt;template&gt; ;"&gt;  width="460" height="240" @mousedown="mousedown" @...

    JavaScript模仿鼠标拖动选择功能

    这个功能可以让用户通过鼠标拖动来选取一个矩形区域内的元素,比如在文本编辑器中选择文字,或者在图像编辑工具中选取部分图像。下面将详细解释如何实现这一功能。 首先,我们需要监听鼠标的`mousedown`、`...

    按住鼠标左键选中区域元素框js代码

    在这个案例中,我们将用JavaScript监听鼠标的按下、移动和释放事件,以便用户可以选取一个矩形区域。 核心的JavaScript代码通常会包括以下几个部分: 1. **事件监听**:使用`addEventListener`方法添加对鼠标事件...

    9.(leaflet篇)leaflet矩形采集与矩形编辑.zip

    这些知识在实际应用中非常广泛,例如,你可以创建一个地图应用,用户可以在地图上画出矩形区域,然后获取该区域的面积,或者用作地理围栏设定,触发特定的业务逻辑。 总结,Leaflet提供的矩形采集与编辑功能,结合...

    jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】

    在本示例中,我们将探讨如何使用jQuery来创建一个可拖动的矩形框,并且这个功能...这在创建交互式界面,特别是需要用户自定义选择区域的应用场景中非常有用。理解这一技术可以帮助开发者更高效地构建富交互的Web应用。

    canvas-draw-panel-master.zip_html5_画矩形

    例如,画矩形的API是: ```javascript // 参数:x轴起点坐标,y轴起点坐标,矩形宽度,矩形高度 ctx.fillRect(x, y, width, height); // 参数:x轴起点坐标,y轴起点坐标,矩形宽度,矩形高度,边框宽度,边框颜色...

    跟随鼠标画线applet

    "跟随鼠标画线applet"是一个基于Java Applet技术的简单图形绘制程序,它允许用户在网页上通过鼠标操作来绘制线条。Applet是Java的一种小程序,可以嵌入到HTML页面中,为用户提供交互式的体验。 这个applet的核心...

    按住鼠标左键选中区域元素框js代码.zip

    这个"按住鼠标左键选中区域元素框js代码.zip"文件包含了一个JavaScript实现的功能,即允许用户通过长按鼠标左键在网页上选择一个矩形区域,从而选中该区域内所有元素。这种功能在数据可视化、图像编辑或用户自定义...

    js使用canvas实现画roi功能,并实现交集并集差集操作支持圆形,矩形,旋转矩形绘制,鼠标像素拾取,图片缩放,图片拖拽,像素

    - **模块化**:项目中的`shape.js`和`drawshape.js`可能包含了形状类定义和绘制函数,遵循模块化设计原则,方便代码复用和维护。 - **事件处理**:使用事件委托,提高性能,减少事件监听器的数量。 - **状态管理*...

    鼠标移动到地图的热点区域时突出显示热点区域的源码

    本文将深入探讨如何使用JavaScript(js)实现鼠标悬停在地图热点区域时突出显示的效果,并基于提供的文件`test.html`、`pic_map.js`和`map.png`进行讲解。 首先,`test.html`是HTML文件,它是网页的基础结构。在`...

    JS实现鼠标截图功能

    在JavaScript(JS)中实现鼠标截图功能,主要是利用HTML5中的Canvas元素以及相关的API来完成。Canvas是一个可编程的画布,允许我们动态绘制图形、处理图像,并且能够捕获屏幕的一部分作为图像数据。以下是对这个功能...

    C#限制鼠标活动区域并适时获取鼠标坐标

    WinAPI提供了`ClipCursor`函数,它可以设置一个矩形区域作为鼠标的活动范围。以下是一个简单的示例代码: ```csharp using System.Runtime.InteropServices; public class MouseRestriction { [DllImport("user32...

    自制小画布工具(HTML5+JS)

    Canvas通过JavaScript API提供了一系列方法,如`fillRect()`, `strokeRect()`, `beginPath()`, `moveTo()`, `lineTo()`等,用于绘制直线、曲线、矩形、圆形等图形。在这个小画布工具中,Canvas被用来接收用户的鼠标...

    dragarea拖动实现区域选择移动缩放选择区域

    在实际项目中,可能还需要考虑边界限制、选择区域的形状(如矩形、圆形)、以及是否支持多选等问题。此外,如果涉及到缩放,可能需要处理比例因子,确保选择区域保持一定的形状。这个过程可能需要用到CSS3的变换(`...

Global site tag (gtag.js) - Google Analytics