canvas实现放大镜功能

采用canvas实现放大镜功能,只需要使用一个方法。。。
先奉上效果图:
效果图
先介绍该方法:
drawImage()
这个方法有三种使用情况:
1、drawImage(img,x,y)
三个参数,第一个参数当然是img元素了,也可以是video元素或者Image对象,x 、y 为图片绘制时在画布中的起始坐标,图像大小与原图相同。
2、drawImage(img , x , y , w , h)
与第一中情况相比,多了两个参数,分别代表所绘图像的宽度和高度。
3、drawImage(img , sx , sy , sw , sh , dx , dy , dw , dh);
9个参数,分别是:图像元素,被复制区域在原画布中的起始横坐标、被复制区域在原画布中的起始纵坐标、被复制区域的宽度、被复制区域的高度、复制后目标图像在画布中的起始横坐标、复制后目标图像在画布中的起始纵坐标、复制后目标图像的宽度、复制后目标图像的高度。
因此这种情况下可以将某幅图像的局部区域复制到另一个画布中的某个位置。
直接来代码了:

<!DOCTYPE html>
<html>
<head>
    <title>index</title>
    <style type="text/css">
    body{
        margin: 0;
        padding: 0;
        position: relative;
    }
    #imgcan{
        display: block;
        cursor: pointer;
    }
    #glasscan{
        display: none;
        border:1px solid #ccc;
        border-radius:101px;
        -webkit-border-radius:101px;
        -o-border-radius:101px;
        -moz-border-radius:101px;
        position: absolute;
    }
    </style>
</head>
<body>
<canvas id="imgcan" width="800" height="500"></canvas>
<canvas id="glasscan" width="200" height="200"></canvas>
<span id="show"></span>
</body>
<script type="text/javascript">
    var imgcan = document.getElementById("imgcan"),
        glasscan = document.getElementById("glasscan"),
        imgContext = imgcan.getContext("2d"),
        glassContext = glasscan.getContext("2d"),
        img = new Image(),
        mouse = captureMouse(imgcan);
    img.src = "1.jpg";
    img.onload = function(){
        imgContext.drawImage(img,0,0);
    }
    //获取元素内鼠标位置
    function captureMouse(element){
        var  mouse = {x:0 , y:0};
        element.addEventListener('mousemove' , function(event){
        var x , y;
        if(event.pageX || event.pageY){
            x = event.pageX;
            y = event.pageY;
        }else{
            x = event.clientX + (document.body.scrollLeft || 
            document.documentElement.scrollLeft);
            y = event.clientY + (document.body.scrollTop || 
            document.documentElement.scrollTop);
        }
        x -= element.offsetLeft;
        y -= element.offsetTop;
        mouse.x = x;
        mouse.y = y;
        } , false)
        return mouse;
    }
    //给画布绑定鼠标移动事件
    imgcan.onmousemove = function(){
            glassContext.clearRect(0,0,glasscan.width,glasscan.height);
            glasscan.style.left = mouse.x + 10 + 'px';
            glasscan.style.top = mouse.y + 10 + 'px';
            glasscan.style.display = "block";
            document.getElementById("show").innerText = mouse.x + '|' + mouse.y;     //显示鼠标位置
            var drawWidth = 50,
                drawHeight = 50;
            glassContext.drawImage(img,mouse.x-drawWidth/4,mouse.y-drawHeight/4,drawWidth,drawHeight,0,0,drawWidth*4,drawHeight*4);     //实现放大镜
    };
    //绑定鼠标移出事件
    imgcan.onmouseout = function(){
            glasscan.style.display = "none";
    }
</script>
</html>

OK~。

jZoomer开源项目主页:<br>http://code.google.com/p/jzoomer/<br>发布包下载地址:http://code.google.com/p/jzoomer/downloads/list<br>SVN下载地址:<br>http://jzoomer.googlecode.com/svn/trunk/<br><br>软件名:jZoomer<br>版本号:1.2.0<br>作者:talent_marquis<甜菜侯爵><br>联系方式:talent_marquis#163.com, marquisx.tz#google.com<br><br>简介:<br>jZoomer 是一款基于SWT/JFace的桌面应用软件<br>功能:<br>·动态放大镜功能<br>·静态图片缩放功能<br>·颜色拾取功能<br>·测量尺功能<br><br>特性:<br>·支持鼠标拖拽窗体和小控件<br>·支持国际化<br>·可扩展架构<br><br>日志:<br>20080621<br>1. Bug修正:<br> ·修正退出时报异常的Bug<br>2. 功能添加:<br> ·实现测量功能,可测量选中区域大小<br>3. 核心调整:<br> ·在system.properties中添加“tray.message.show”字段用以控制是否在托盘区显示提示信息<br> ·实现TrackerAction用以实现测量功能<br>4. 版本变更:<br> 版本升级为1.2.0<br><br>20080620<br>1. Bug修正:<br> ·修正程序退出时会报异常的Bug<br>2. 功能添加:<br> ·实现左键单击托盘区图标,主窗口开启/隐藏功能<br>3. 核心调整:<br>4. 版本变更:<br> 版本升级为1.1.4<br><br>20080619 2nd<br>1. Bug修正:<br> ·修正开始/暂停监视切换时有时会报空指针异常的错误<br>2. 功能添加:<br> ·实现静止时图片的缩放<br>3. 核心调整:<br> ·动态\静止开关中对图片处理的逻辑改变,以实现静止时图片的缩放功能<br> ·ZoomAction中zoomIn、zoomOut方法更新,支持对静止图片的缩放<br>4. 版本变更:<br> 版本升级为1.1.3<br> <br>20080619<br>1. Bug修正:<br> ·修正取色开启时鼠标双击取色后,色彩信息显示不正常的bug<br>2. 功能添加:<br> ·隐藏/取色后会在系统托盘区有信息提示<br>3. 核心调整:<br> ·在trayItem中加入tooltip用于辅助信息提示<br>4. 版本变更:<br> 版本升级为1.1.2<br><br>20080618 2nd<br>1. Bug修正:<br>2. 功能添加:<br> ·添加用户手册中文版V1.1<br> ·添加用户手册英文版V1.1<br> ·添加ant编译文件,使用“ant package”即可轻松打包发布文件<br> ·调整system.properties的排版,方便阅读<br>3. 核心调整:<br> ·加入fatjar.jar架包,用于打包编译<br>4. 版本变更:<br> 版本升级为1.1.1<br><br>20080618<br>1. Bux修正:<br> ·修正工程中加载lib路径不正确的bug<br> ·修正鼠标滚轮在停止取图监视时使用上的Bug<br> ·修正鼠标进入窗口后,还可以开启监视的Bug<br>2. 功能添加:<br> ·添加色彩信息面板<br> ·实现取色功能,用Ctrl+C开启,双击可以直接取色至剪贴板,单击暂停/开始取色<br>3. 核心调整:<br> ·在Google Code上添加了SVN地址用于维护,地址为:https://jzoomer.googlecode.com/svn/trunk/<br> ·重构鼠标拖拽Widget和面板的方法,增强其扩展性<br> ·添加ColorInfoPanel用于显示和拾取颜色<br> ·在ColorAction添加ColorInfoPanel相关的资源、逻辑和方法<br> ·添加TrackerAction用以实现对图片大小的测量(未实现)<br>4. 版本变更:<br> 版本升级为1.1<br>5. 待做事项:<br> ·停止监控时图片的缩放<br> ·对图片大小的测量(width=xxxpx,height=xxxpx)<br> ·色彩信息面板样式的美化<br> ·build.xml文件<br><br>20080617<br>1. Bug修正:<br> ·修正进出窗口时会报异常的Bug<br>2. 功能添加:<br> ·将开始/暂停监控的快捷键更改为Ctrl+Z<br> ·支持容器内部控件的拖拽(按住Ctrl键)<br> ·支持拖拽容器时移动整个Shell(在空白处)<br> ·拖拽时鼠标变成小手形状<br> ·添加exit.confirm属性用以判断是否在退出时弹出提示框<br>3. 核心调整:<br> ·添加canvas用于对静止截图的处理<br> ·添加Tracker用于测量<br> ·添加Label用于信息提示<br> ·添加ColorAction用于对静止截图的处理<br>4. 版本变更:<br> 版本升级为1.03<br><br>20080616 2nd<br>1. Bug修正:<br> ·修正暂停监控时调整窗口大小,显示图像错乱的Bug<br>2. 功能添加:<br> ·添加设定背景色属性background.color<br>3. 核心调整:<br> ·去掉canvas,直接将采样图片放于container上,便于以后进一步在container上添加组件及操作<br>4. 版本变更:<br> ·版本升级为1.02<br><br>20080616<br>1. Bug修正:<br> ·暂未修正无法通过修改配置文件切换语言的Bug<br>2. 功能添加:<br> ·添加使用手册英文版v1.0<br> ·如需软件显示语言自动随系统语言切换,只需将System.properties中“locale”属性置空即可<br> ·调整缩放范围,使其既可放大屏幕也可缩小屏幕<br>3. 核心调整:<br> ·添加SWT/JFace的jar包到工程lib目录下<br> ·BasicWindow添加对鼠标移动点击的事件监听,以实现组件可用鼠标拖拽功能<br> ·BasicWindow添加在屏幕中央显示/随鼠标位置显示方法<br> ·更改屏幕采样并缩放的核心算法,使其缩放质量可以调整,支持缩小屏幕,且采样速度更快<br>4. 版本变更:<br> ·版本升级为1.0.1<br>5. 待做事项:<br> ·使用手册英文版<br> ·采样图片截取:只截取可见部分<br> ·对基类添加:随鼠标拖动功能,自动在屏幕中央显示功能,自动随鼠标显示功能<br> ·打包后无法通过修改配置文件切换语言(打包之前可以)<br> ·整理需要到的jar包,从eclipse中提取出来放到lib目录下<br> ·设置滚轮放大缩小可以开启/取消<br><br>20080615<br>1. Bug修正:<br> ·解决内存溢出Bug<br> ·解决字符串乱码Bug<br> `解决拖拽位置不正常Bug<br>2. 功能添加:<br> ·添加SystemPropertiesReader类,用于解析系统配置文件system.properties<br> ·完成软件的国际化,可根据需要切换英文/中文(暂时只能在启动前配置)<br> ·添加快捷键和部分图标<br> ·实现关闭到系统托盘效果<br>3. JZoomer v1.0 发布<br><br>20080614<br>1. 重新设计框架,提高其重用性<br>2. 实现功能:<br> ·字符串国际化<br> ·系统文件可编辑<br> ·系统托盘显示<br> ·支持滚轮缩放功能<br> ·控件拖拽功能<br> <br>20071227<br>1. JExplorer实现,初步了解JFace框架的设计思想,了解Action的使用方法<br><br>20070730<br>1. ColorPicker实现,其中含有部分放大镜功能,但有内存溢出Bug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值