- 浏览: 466266 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
a1439226817:
能不能发下源码1439226817@qq.com
ExtJsCRUD组件实现 -
w923690968:
[list][*]引用[u][/u][/list]
[JS]Drag And Drop -
zhumingyuan:
您好!用的的是3.2.3版本,按照您的方法配置了一下,但是还是 ...
spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案 -
sumo084:
我把xDarkness-MultClrBubble-1.0.j ...
JAVA实现类泡泡屏保效果 -
sumo084:
求源码,楼主好人,630483738@qq.com,谢谢
JAVA实现类泡泡屏保效果
JS组件:
@author Darkness
@version 1.0
@date 2010-08-18
测试页面:
@version 1.1
@description 采用div替换原来的img作为画布,修复不兼容其他浏览器bug
@author Darkness
@date 2012-07-27
问题:1.0版本中采用IMG.setCapture(true);方式在图片上实现鼠标拖动等事件监听,该方式在最新的ie9下行不通,也不兼容其他浏览器
改进:采用一个div作为画布替换原来的img,将img作为其背景并删除原来的img,然后监听div上的鼠标拖动等事件达到原来同样的效果,此方式兼容其他浏览器
代码:
测试:
效果图:
@author Darkness
@version 1.0
@date 2010-08-18
Function.prototype.bind = function(obj){ var _method = this; return function(){ _method.apply(obj, arguments); } } DrawRectangle = function(id, onMouseUp, className){ this.IMG = document.getElementById(id); this.isDraw = false; this.isMouseUp = true; this.index = 0; this.currentDrawRectangle = null; this.className = className; this.RectangleDivs = []; this.debug = false; this._onMouseUp = onMouseUp; this.bindListener(); } DrawRectangle.prototype = { bindListener: function(){ this.IMG.onmousemove = this.dragSize.bind(this); this.IMG.onmouseup = this.onMouseUp.bind(this); this.IMG.onmouseout = this.onMouseOut.bind(this); this.IMG.onmouseover = this.onMouseOver.bind(this); this.IMG.onmousedown = this.drawLayer.bind(this); this.IMG.onmouseup = this.onMouseUp.bind(this); }, drawLayer: function(){ this.IMG.setCapture(true); this.isDraw = true; this.ismouseup = false; this.index++; var pos = this.getSourcePos(); var x = event.offsetX; var y = event.offsetY; var top = y + pos.top - 2; var left = x + pos.left - 2; var d = document.createElement("div"); document.body.appendChild(d); d.style.border = "1px solid #ff0000"; d.style.width = 0; d.style.height = 0; d.style.overflow = "hidden"; d.style.position = "absolute"; d.style.left = left; d.style.top = top; if(this.className) { d.className = this.className; } d.id = "draw" + this.index; if (this.debug) { //d.innerHTML = "<div class='innerbg'>x:" + x + ",y:" + y + ". img_x:" + img_x + ",img_y:" + img_y + ".</div>"; } this.currentDrawRectangle = d; this.RectangleDivs[this.index] = { left: left, top: top, el: d }; }, getSourcePos: function(){ return this.getAbsolutePosition(this.IMG); }, dragSize: function(){ if (this.isDraw) { if (event.srcElement.tagName != "IMG") return; var pos = this.getSourcePos(); var img_x = pos.top; var img_y = pos.left; var x = event.offsetX; var y = event.offsetY; var drawW = (x + img_x) - this.RectangleDivs[this.index].left; var drawH = (y + img_y) - this.RectangleDivs[this.index].top; this.currentDrawRectangle.style.width = drawW > 0 ? drawW : -drawW; this.currentDrawRectangle.style.height = drawH > 0 ? drawH : -drawH; if (drawW < 0) { this.currentDrawRectangle.style.left = x + img_x; } if (drawH < 0) { this.currentDrawRectangle.style.top = y + img_y; } if (this.debug) { this.currentDrawRectangle.innerHTML = "<div class='innerbg'>x:" + x + ",y:" + y + ". img_x:" + img_x + ",img_y:" + img_y + ". drawW:" + drawW + ",drawH:" + drawH + ". Dleft[i]:" + this.RectangleDivs[this.index].left + ",Dtop[i]:" + this.RectangleDivs[this.index].top + "src:" + event.srcElement.tagName + ".</div>"; } } else { return false; } }, stopDraw: function(){ this.isDraw = false; }, onMouseOut: function(){ if (!this.isMouseUp) { this.isDraw = false; } }, onMouseUp: function(){ this.isDraw = false; this.isMouseUp = true; this.IMG.releaseCapture(); if(this._onMouseUp) { this._onMouseUp.call(this, this.currentDrawRectangle); } }, onMouseOver: function(){ if (!this.isMouseUp) { this.isDraw = true; } }, getAbsolutePosition: function(obj){ var t = obj.offsetTop; var l = obj.offsetLeft; var w = obj.offsetWidth; var h = obj.offsetHeight; while (obj = obj.offsetParent) { t += obj.offsetTop; l += obj.offsetLeft; } return { top: t, left: l, width: w, height: h } } };
测试页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>DrawRectangle</title> <style type="text/css"> <!-- body { margin-top: 0px; margin-left: 0px; } div { margin:0; padding:0; } .innerbg { background:#ff0000; filter:Alpha(Opacity=40, FinishOpacity=90, Style=0, StartX=0, StartY=0, FinishX=100, FinishY=100); width:100%; height:100%; } --> </style> <script language="javascript" type="text/javascript" src="DrawRectangle.js"></script> <script> window.onload = function() { new DrawRectangle('bigimg', function(div){ alert(div.outerHTML); }); } </script> </head> <body> <img src="test.gif" name="bigimg" border="0" id="bigimg" style="margin-left:0px;margin-top:0px;border:1px solid #ccc;" > </body> </html>
@version 1.1
@description 采用div替换原来的img作为画布,修复不兼容其他浏览器bug
@author Darkness
@date 2012-07-27
问题:1.0版本中采用IMG.setCapture(true);方式在图片上实现鼠标拖动等事件监听,该方式在最新的ie9下行不通,也不兼容其他浏览器
改进:采用一个div作为画布替换原来的img,将img作为其背景并删除原来的img,然后监听div上的鼠标拖动等事件达到原来同样的效果,此方式兼容其他浏览器
代码:
DrawRectangle = function(id, onMouseUp, className){ document.oncontextmenu=function() { return true; }; this.IMG = document.getElementById(id); var masker = document.createElement("div"); masker.id = "mask_" + id; var position = this.getAbsolutePosition(this.IMG); masker.style.width = position.width + "px"; masker.style.height = position.height + "px"; masker.style.left = position.left; masker.style.top = position.top; masker.style["background-image"] = "url("+this.IMG.src+")"; masker.className = "imgmasker"; this.masker = masker; this.IMG.parentNode.appendChild(masker); this.IMG.parentNode.removeChild(this.IMG); this.isDraw = false; this.isMouseUp = true; this.index = 0; this.currentDrawRectangle = null; this.className = className; this.RectangleDivs = []; this.debug = true; this._onMouseUp = onMouseUp; this.bindListener(); }; DrawRectangle.prototype = { bindListener: function(){ this.masker.onmousemove = this.dragSize.bind(this); this.masker.onmouseup = this.onMouseUp.bind(this); this.masker.onmouseout = this.onMouseOut.bind(this); this.masker.onmouseover = this.onMouseOver.bind(this); this.masker.onmousedown = this.drawLayer.bind(this); this.masker.onmouseup = this.onMouseUp.bind(this); }, drawLayer: function(){ //this.IMG.setCapture(true); this.isDraw = true; this.ismouseup = false; this.index++; var pos = this.getSourcePos(); var x = event.offsetX; var y = event.offsetY; var top = y + pos.top - 2; var left = x + pos.left - 2; var d = document.createElement("div"); // document.body.appendChild(d); this.masker.appendChild(d); d.style.border = "1px solid #ff0000"; d.style.width = 0; d.style.height = 0; d.style.overflow = "hidden"; d.style.position = "absolute"; d.style.left = left + "px"; d.style.top = top + "px"; d.style.opacity = 0.5; d.style["z-index"] = 2; if(this.className) { d.className = this.className; } d.id = "draw" + this.index; if (this.debug) { d.innerHTML = "<div class='innerbg'>x:" + x + ",y:" + y + "..</div>"; } this.currentDrawRectangle = d; this.RectangleDivs[this.index] = { left: left, top: top, el: d }; }, getSourcePos: function(){ return this.getAbsolutePosition(this.masker); }, dragSize: function(){ if (this.isDraw) { if (!(event.srcElement.tagName.toLowerCase() == "div" && event.srcElement.className == "imgmasker")) return; var pos = this.getSourcePos(); var img_x = pos.top; var img_y = pos.left; var x = event.offsetX; var y = event.offsetY; var drawW = (x + img_x) - this.RectangleDivs[this.index].left; var drawH = (y + img_y) - this.RectangleDivs[this.index].top; this.currentDrawRectangle.style.width = (drawW > 0 ? drawW : -drawW) + "px"; this.currentDrawRectangle.style.height = (drawH > 0 ? drawH : -drawH) + "px"; if (drawW < 0) { this.currentDrawRectangle.style.left = (x + img_x) + "px"; } if (drawH < 0) { this.currentDrawRectangle.style.top = (y + img_y) + "px"; } if (this.debug) { this.currentDrawRectangle.innerHTML = "<div class='innerbg'>x:" + x + ",y:" + y + ". img_x:" + img_x + ",img_y:" + img_y + ". drawW:" + drawW + ",drawH:" + drawH + ". Dleft[i]:" + this.RectangleDivs[this.index].left + ",Dtop[i]:" + this.RectangleDivs[this.index].top + "src:" + event.srcElement.tagName + ",this.isDraw: " + this.isDraw + ",this.isMouseUp: " + this.isMouseUp + ".</div>"; } } else { return false; } }, stopDraw: function(){ this.isDraw = false; }, onMouseOut: function(){ if (!this.isMouseUp) { this.isDraw = false; } }, onMouseUp: function(){ this.isDraw = false; this.isMouseUp = true; //this.IMG.releaseCapture(); if(this._onMouseUp) { this._onMouseUp.call(this, this.currentDrawRectangle); } }, onMouseOver: function(){ if (!this.isMouseUp) { this.isDraw = true; } }, getAbsolutePosition: function(obj){ var t = obj.offsetTop; var l = obj.offsetLeft; var w = obj.offsetWidth; var h = obj.offsetHeight; while (obj = obj.offsetParent) { t += obj.offsetTop; l += obj.offsetLeft; } return { top: t, left: l, width: w, height: h }; } };
测试:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>DrawRectangle</title> <style type="text/css"> <!-- body { margin-top: 0px; margin-left: 0px; } div { margin:0; padding:0; } .innerbg { background:#ff0000; filter:Alpha(Opacity=40, FinishOpacity=90, Style=0, StartX=0, StartY=0, FinishX=100, FinishY=100); width:100%; height:100%; } div.imgmasker { position: absolute; z-index: 1; cursor: pointer; border:1px solid red; background:#000000; opacity: 1; } --> </style> <script language="javascript" type="text/javascript" src="arkjs/lang.js"></script> <script language="javascript" type="text/javascript" src="DrawRectangle.js"></script> <script> window.onload = function() { new DrawRectangle('bigimg', function(div){ //alert(div.outerHTML); }); } </script> </head> <body> <img src="test.jpg" name="bigimg" border="0" id="bigimg" style="margin-left:0px;margin-top:0px;border:1px solid #ccc;"/> </body> </html>
效果图:
发表评论
-
google浏览器书签账号登陆不上解决方案
2011-10-10 09:22 760问题: 最近google浏览器书签同步账号登陆不上 ... -
Dom多事件注册
2010-12-15 15:28 1173今天看到这样一段代码,如下: Page.clickFunc ... -
excanvas饼图实现
2010-10-21 15:04 2832代码比较简单,需要注意的一点就是: 如果想让饼图的边框显示出来 ... -
DOM中cloneNode的使用之旅
2010-10-21 14:52 2530struts2中可以自动封装表单提交过来的参数 List< ... -
Tab键控制页面中元素获取焦点顺序
2010-08-19 17:35 4092修改默认Tab键按键触发,界面元素获取焦点的顺序 此方法 ... -
JS-自动提示组件
2010-08-19 17:23 1783注:源自Ajax实战 实现自动提示功能: <!DOCT ... -
JS控制输入字符长度
2009-11-09 10:50 5543<script language="Jav ... -
internet explorer 无法打开 Internet站点 已中止操作
2009-09-26 18:20 2148JavaScript使IE的经典异常 代码 http://ww ... -
fusioncharts相关问题
2009-09-26 15:59 1770中文问题 使用UTF-8 or GBK,X 轴正常, ... -
js日期时间函数
2009-09-20 17:28 1177Date.prototype.isLeapYear 判断闰 ... -
IE6 png 透明 (三种解决方法)
2009-09-14 14:49 2037FF和IE7已经直接支持透明的png图了,下面这个主要是解决I ... -
类似MSN的消息提示
2009-08-18 11:00 961<html> <head> ... -
IE6的“错误:53 存储空间不足,无法完成此操作”解决方法
2009-08-07 21:10 7985一法: 打开注册表, ... -
表格边框的隐藏
2009-08-07 09:19 2624代码如下: <html> <he ... -
JS操作VML
2009-08-03 14:52 2789可以用鼠标拖动这条线,效果如图: 说明:还有一些bug, ... -
javascript技巧大全 (3)
2009-03-06 12:36 1116... -
javascript技巧大全(2)
2009-03-06 12:33 1314进入页面<meta http-equiv="P ... -
javascript技巧大全(1)
2009-03-06 12:32 1176事件源对象 event.srcElement.tagName ... -
javascript性能优化
2009-02-27 10:56 4353很久就想总结一下关于javascript性能优化方面的一些东西 ... -
JavaScript DOM笔记:修改DOM
2009-02-27 10:51 2257常用函数: creat ...
相关推荐
在Vue.js框架中实现图像上绘制矩形框并获取对角坐标的功能,是常见的图像处理需求,例如在图像标注、对象检测等应用场景中。本文将详细介绍如何在Vue项目中完成这个任务。 首先,我们需要了解Vue的基本概念。Vue.js...
在Vue项目中实现图片上画矩形框并获取对角坐标以及设置`<map>`中的`<area>`样式,涉及到的技术主要包括JavaScript、HTML5的绘图API以及图像热区技术。接下来,我们将深入探讨这些知识点。 1. **JavaScript绘图API**...
本教程将深入探讨如何使用jQuery实现一个功能,即在选定的图片上绘制带有颜色的矩形框,以便用户可以标记或选择图片的特定区域。这个功能常见于图像编辑工具、标注应用或者数据分析场景,通过获取XY轴坐标,可以精确...
以上就是使用HTML和JavaScript实现“在图片上拖拽鼠标画矩形”的主要步骤和技术点。这个功能结合了文件读取、Canvas绘图和事件处理,是Web开发中一个很好的实践案例。通过理解并掌握这些知识,开发者可以创建出更多...
安装opencv2.4.9后可以直接运行的mfc,可以实现读取本地图片显示在picture控件上,同时可以在显示图片上进行画框,同时返回画框的矩形的左上角右下角在照片上实际像素点的位置,我写的mfc读的是1920*1200的图片,...
在JavaScript中,我们需要获取到Canvas的2D渲染上下文,这通常通过`canvas.getContext('2d')`实现。这个2D渲染上下文提供了丰富的绘图方法,如`fillRect()`, `strokeRect()`, `beginPath()`, `moveTo()`, `lineTo()`...
1. 绑定`mousedown`事件到矩形框上。当鼠标按键被按下时,获取鼠标当前位置(`event.pageX` 和 `event.pageY`)和矩形框的初始位置(`left` 和 `top` 属性)。 2. 使用`mousemove`事件来跟踪鼠标移动。根据鼠标移动...
在本文中,我们将深入探讨如何使用Vue.js框架与Konva.js库来实现数据标注功能,特别是绘制和操作矩形及多边形。Vue.js是一种流行的前端JavaScript框架,它提供了组件化开发模式,使得构建可复用和易于维护的用户界面...
在JavaScript(简称JS)编程中,实现鼠标拉框截图是一项常见的功能,特别是在Web应用中,如在线编辑器、协作工具等。这个功能的核心是通过监听鼠标事件,结合HTML5的Canvas API来完成图像的选择和捕获。以下是实现这...
在本场景中,我们讨论的是如何使用JavaScript动态地在图片上生成矩形热区,并在热区上添加蒙版效果。热区(Area)是HTML `<map>` 元素的一部分,允许我们在图像上定义可点击的交互区域。 1. **HTML `<img>` 和 `...
这种技术通常用于创建图像映射,即在一张图片上定义多个可交互的区域,每个区域可以链接到不同的网页或者触发不同的操作。 "Area Map" 是HTML中的一个元素,它是实现图像热区的关键。`<map>`标签配合`<area>`标签...
然后在Vue组件中通过JavaScript获取这个Canvas的上下文(context)并利用`drawImage`方法将图片绘制到Canvas上。`drawImage`方法接受多个参数,其中包括图片对象、绘制位置的x坐标、y坐标以及绘制的宽度和高度。 ```...
首先,`<map>`元素定义了一个图像映射,它不直接显示在页面上,但与`<img>`标签配合使用,为图像提供可交互的区域。例如: ```html <!-- 配对的area标签将在这里定义 --> ``` `usemap`属性的值是一个井号(#)...
在微信小程序中,Canvas是一个非常重要的组件,它允许开发者在界面上进行动态图形绘制,创造出丰富的视觉效果。本文将深入探讨如何使用Canvas API在微信小程序中绘制矩形、椭圆、直线以及添加文字。 首先,我们需要...
在本案例中,我们关注的是"js实现的图片放大镜效果",这是一个常见的电商网站功能,允许用户在鼠标悬停时查看产品图片的详细细节。通过JQuery库来实现这一效果,可以简化代码并提高性能。 JQuery是一个流行的...
JavaScript图片切割技术是一种在网页上实现动态图像裁剪的功能,常用于用户自定义头像、产品图片编辑等场景。这项技术结合了HTML、CSS和JavaScript,使得用户可以在浏览器端通过交互方式选择并调整图片的裁剪区域。...
如果项目中使用了框架如jQuery或者Vue.js,那么实现方式会有略微不同,但基本思路是一致的:监听鼠标移动事件,根据鼠标位置决定显示哪张图片。 在实际应用中,我们还可以增加一些优化,如缓动动画,让图片切换更为...
2. 画框:在捕获到的屏幕图像上,使用图形绘制函数(如Windows的GDI,或跨平台的Qt、wxWidgets等库)在用户选择的区域内画出矩形框,可以是实线或虚线,以便用户清晰看到所选区域。 三、图像处理 1. 截取图像:当...
JS Paint,这是一个完全用JavaScript语言实现的项目,旨在复刻经典的Windows画图工具,为用户提供了在浏览器环境中进行简单绘图的功能。这个项目充分利用了JavaScript的动态特性和丰富的Web API,结合CSS技术,为...
它可以接受多个参数,如图片对象、起始绘制的x和y坐标、以及要绘制的宽度和高度,从而实现图片的切割和缩放。 4. **裁剪(Cropping)**: 要切割图片,我们需要使用`drawImage()`方法的更复杂的用法。例如,可以设定源...