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

HTML5学习记录-----canvas学习之鼠标选取放大图像

 
阅读更多
canvas鼠标选取放大
欢迎大家有好点建议可以提。js高级扣扣群:170798851 欢迎来交流学习

    git项目地址:https://github.com/Jonavin/HTML5_Study

 

/**
 * Created by wsf on 2014-11-23.
 */
;//分号为了保证代码合并时不出错
(function(win){
     "use strict";
      var doc = win.document,cvs = doc.querySelector("#canvas"),
       selector = doc.getElementById("selector"),
       restBtn = doc.getElementById("resetBtn"),
       ctx = cvs.getContext("2d"),
       img = new Image(),width = cvs.width,height = cvs.height,msdown = {},selectRect = {},dragging = false;

       var _functions = {
           //选取开始
           selectStart : function(x,y) {
               msdown.x = x;//鼠标按下横坐标
               msdown.y = y;
               selectRect.left = msdown.x;
               selectRect.top = msdown.y;//
               this.moveSelector();//移动选取框
               this.showSelector();//显示选取框
               dragging = true;//
           },
           //移动选取框
           moveSelector: function () {
               selector.style.top = selectRect.top + "px";
               selector.style.left = selectRect.left + "px";

           },
           //显示选取框
           showSelector:function(){
               selector.style.display = "inline";
           },
           //展开选取框
           selectorStretch:function(x,y){
               selectRect.left = Math.min(x,msdown.x);
               selectRect.top = Math.min(y,msdown.y);
               selectRect.width = Math.abs(x - msdown.x);
               selectRect.height = Math.abs(y-msdown.y);
               this.moveSelector();//移动选取框
               this.resizeSelector();//重设选取框

           },
           //重设选取框大小
           resizeSelector:function(){
               selector.style.width = selectRect.width + "px";
               selector.style.height = selectRect.height + "px";
           },
           //重置选取框
           resetSelector:function(){
              selectRect = {top:0,left:0,width:0,height:0};
           },
           //选取结束
           selectEnd:function(){
               var _box = cvs.getBoundingClientRect();
               try{
                   ctx.drawImage(cvs,selectRect.left-_box.left,selectRect.top-_box.top,selectRect.width,selectRect.height,0,0,width,height);
               }catch (e){
               }
               this.resetSelector();
               selector.style.width = 0;
               selector.style.height = 0;
               this.hideSelector();
               dragging = false;
           },
           hideSelector:function(){
               selector.style.display = "none";
           }
       }

       cvs.onmousedown = function(e){
           var x = e.clientX,y = e.clientY;
           e.preventDefault();//阻止浏览器默认事件
           _functions.selectStart.call(_functions,x,y);
       }
       win.onmousemove  = function(e){
           var x = e.clientX,y = e.clientY;
           e.preventDefault();
           if(dragging){
               _functions.selectorStretch.call(_functions,x,y);
           }
       }
       win.onmouseup = function(e){
           e.preventDefault();
           _functions.selectEnd.call(_functions);
       }
       img.onload = function(){
           ctx.drawImage(img,0,0,width,height);
       }
       restBtn.onclick = function(e){
           ctx.clearRect(0,0,width,height);
           ctx.drawImage(img,0,0,width,height);
       }
       img.src = "img.jpg";
})(window);

 

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>鼠标选取canvas区域</title>
    <style>
        body{
            background: rgba(100,145,250,0.3);
        }
        #canvas{
            margin-left: 20px;
            margin-bottom: 10px;
            margin-right: 0;
            border:thin solid #aaa;
            padding: 0;
        }
        #controls{
            margin:20px 0 20px 20px;
        }
        #selector{
            position: absolute;
            border:3px solid blue;
            cursor: crosshair;
            display: none;
        }
    </style>
</head>
<body>
<div id="controls">
    <input type="button" id="resetBtn" value="重置"/>
</div>
<div id="selector"></div>
<canvas id="canvas" width="800" height="520">
    不支持canvas
</canvas>
<script src="mouseSelect.js"></script>
</body>
</html>

 

 

 

 

  • 大小: 615.4 KB
  • 大小: 490.2 KB
0
0
分享到:
评论

相关推荐

    HTML5实现的点阵列响应鼠标局部放大镜动画特效源码.zip

    开发者可能使用事件监听器(如`addEventListener`)来捕获鼠标的移动事件,当鼠标在图像上移动时,计算出相对于图像的坐标,然后在`&lt;canvas&gt;`上选取对应的像素块,并放大显示。这通常涉及到图片数据的读取和处理,...

    图片细节放大查看

    6. **优化性能**:考虑到性能问题,可以使用Canvas或者WebGL进行图像处理,尤其是在放大非常大分辨率的图片时。同时,也可以考虑使用懒加载技术,只在需要的时候加载高分辨率的图片细节。 最后,关于"照片选取"的...

    类似淘宝的图片放大功能

    在开发一个类似淘宝的图片查看功能时,"图片放大镜"是提高用户体验的关键技术之一。这个功能让用户在不离开当前页面的情况下,能够清晰地查看商品的细节,从而增强购物体验。下面将详细介绍如何实现这样的功能,并...

    图片放大镜效果2 网页特效

    4. **图片裁剪与缩放**:为了实现放大镜效果,需要获取图片的像素数据,然后根据鼠标位置选取相应区域进行放大显示。这可以通过JavaScript的Canvas API来实现,或者利用CSS的`background-position`属性和`transform:...

    Canvas仿微信照片裁剪功能

    在开发Web应用时,有时我们需要实现类似微信的照片裁剪功能,让用户可以自由调整选取的图片区域。本项目正是一个基于Canvas技术实现的仿微信照片裁剪控件,它提供了PC端和移动端的交互体验,包括拖动裁剪、手势放大...

    asp.net切图并保存(3个资源)

    用户选择图片上传后,前端展示图片,允许用户通过鼠标拖动一个矩形框来选取要切取的部分。然后,利用AJAX将选定区域的坐标发送到后台ASP.NET服务器。 其次,"ZoomImageDemo56d73cbc-e41a-4c97-b307-228ca3313136....

    Python-超级画板小游戏

    【Python-超级画板小游戏】是一个使用Python编程语言实现的互动型绘画应用,它为学习者提供了一个实践Python语法和图形用户界面设计的平台。这个项目涵盖了多种功能,包括使用画笔绘制图形、使用橡皮擦擦除内容、...

    仿照昵图网写的前端页面

    - **选择器**(选择器.html):选择器是CSS中用于选取HTML元素的方式,如`#id`选择器选取特定ID的元素,`.class`选择器选取具有特定类名的元素,`element`选择器选取特定类型的元素,以及更复杂的组合选择器和伪类...

    图片截取+预览功能

    1. 提供缩放功能,允许用户放大或缩小截图区域,以便更精确地选取。 2. 添加撤销和重做操作,方便用户修正错误。 3. 考虑性能问题,如果图片过大,截取和预览可能会有延迟,可以考虑使用Web Workers进行异步处理。 4...

    cropper.rar

    `&lt;canvas&gt;`元素是HTML5中强大的图形处理工具,它可以动态渲染图像,进行像素级别的操作,非常适合进行图像裁剪和编辑。 在实际应用中,cropper.js通常会配合后台服务进行数据交互。例如,用户在前端完成图片裁剪后...

    jquery 图片插件

    这通常需要用到canvas元素来绘制和处理图像,结合cropper.js等插件可以轻松实现这一功能。 在开发这些插件时,开发者需要注意以下几点: - **响应式设计**:确保图片处理功能在不同屏幕尺寸和设备上都能正常工作,...

    图片处理js

    1. 图片剪裁(Cropping):图片剪裁是选取图片中的一部分作为新的图像,常用于用户头像设置或内容编辑。在JavaScript中,可以利用HTML5的Canvas API来实现这一功能。通过创建一个canvas元素,加载图片到canvas,然后...

    Adobe Photoshop 鲜为人知的75个技巧

    - **操作方法**:如果你想旋转图像中的某一部分使其保持水平状态,可以先使用裁剪工具 (`C`) 选择该部分,然后通过 “图像” &gt; “旋转画布” &gt; “任意角度” (`Image` &gt; `Rotate Canvas` &gt; `Arbitrary`) 来精确调整...

    Jquery特效

    2. **Canvas绘图**: 使用HTML5的canvas元素绘制图形,实现动态图像和游戏。 3. **拖放(Drag and Drop)**: 利用HTML5的拖放API,创建可交互的网页元素。 4. **图表(Charts)**: 用JavaScript生成各种统计图表,...

    JavaScript图片特效类

    通常用两个图片元素实现,一个显示原图,另一个用于放大效果,通过JavaScript处理鼠标移动事件,实时调整放大镜区域的大小和位置。 ### 5. 图片裁剪 JavaScript图片裁剪功能允许用户自定义选取图片的一部分进行保存...

    swt仿qq截图

    3. **选择截图区域**:为了模仿QQ截图的选取功能,可以添加一个透明的`Composite`覆盖在`Canvas`上,用户可以通过拖动选择截图区域。可以使用`MouseListener`和`MouseMotionListener`监听鼠标事件,确定并更新选择的...

    js图片裁剪

    2. **交互性**:好的JavaScript图片裁剪控件应具有高度的交互性,允许用户通过鼠标或触屏设备选择图像的裁剪区域。这包括拖动、缩放、旋转和调整裁剪框等功能,确保用户能够精确地选取所需的图像部分。 3. **API...

    JAVASCRIPT实现的多媒体电子相册——附操作说明

    Canvas提供了一种在浏览器中动态绘制图像的方法,通过坐标选取和画布的裁剪功能,可以让用户聚焦到图片的特定部分。 在实现这些功能时,开发者可能还使用了一些常见的JavaScript设计模式,如模块化(通过立即执行...

    C#绘制曲线图可扩展架构程序

    5. **鼠标交互**: 鼠标放大、缩小、移动功能是通过捕捉鼠标事件,如MouseWheel、MouseDown和MouseMove,然后相应地调整图表的缩放和视图平移。这需要理解坐标系统的转换以及如何在图形上下文中应用变换矩阵。 6. **...

    一个简易的绘图程序及其扩展

    5. **选择与剪切**:添加选择工具,让用户可以选取图形的一部分进行剪切、复制和粘贴。 6. **变换操作**:实现旋转、缩放、平移等变换功能,增强图形处理的灵活性。 7. **图层管理**:引入图层概念,使得多个图形...

Global site tag (gtag.js) - Google Analytics