原生js基于canvas实现一个简单的前端截图工具代码实例


Posted in Javascript onSeptember 10, 2019

这篇文章主要介绍了原生js基于canvas实现一个简单的前端截图工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

先看效果

原生js基于canvas实现一个简单的前端截图工具代码实例

代码如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
      *{
        padding: 0;
        margin: 0;
      }
      .clip-img-w{
        position: relative;
        width: 100%;
        height: 100%;
        font-size: 0;
      }
      .clip-img-w img{
        max-width: 100%;
        max-height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        margin: auto;
      }
      .clip-img-w canvas{
        position: absolute;
        left: 0;
        top: 0;
      }
      .clip-img-w #clipcanvas{
        z-index: 2;
      }
      .clip-img-w #drawcanvas{
        background: #fff;
        z-index: 1;
      }       
      #img{
        display: block;
        margin: 0 auto;
      }
      .box-c{
        width: 400px;
        height: 200px;
        border: 1px solid #F35252;
        margin: 20px auto;
      }
    </style>
  </head>
  <body>
    <div class="box-c">
      <div class="clip-img-w" id="clip-img-w">
        <canvas id="drawcanvas" ></canvas>
        <canvas id="clipcanvas" ></canvas>
      </div>
    </div>
     
    <!-- 结果 -->
    <img src="" id="img">
  </body>
  <script type="text/javascript">
    var img = document.getElementById("img");
    var url = 'http://img.muchengfeng.cn/FvC7i-GkXYoHE7kGFlNfj7xEzvIQ';
     
    var wrap = document.getElementById("clip-img-w");
    var width = wrap.offsetWidth;
    var height = wrap.offsetHeight;
   
    var clipcanvas = document.getElementById("clipcanvas");
    var drawcanvas = document.getElementById("drawcanvas");
    clipcanvas.width = width;
    clipcanvas.height = height;
    drawcanvas.width = width;
    drawcanvas.height = height;
     
 
    var clipCtx = drawcanvas.getContext("2d");
    var clipImg = document.createElement("img");
    clipImg.crossOrigin = "anonymous";
    clipImg.src = url;
    var timg = clipImg.cloneNode();
    wrap.appendChild(clipImg);
    clipImg.onload = function(){
      var x = Math.floor((width - this.width)/2);
      var y = Math.floor((height - this.height)/2);
      clipCtx.drawImage(this,0,0,timg.width,timg.height,x,y,this.width,this.height);
    }
     
     
    var ctx = clipcanvas.getContext("2d");
    ctx.fillStyle = 'rgba(0,0,0,0.6)';
    ctx.strokeStyle="green";
    var start = null;
    var clipArea = {};//裁剪范围
     
    clipcanvas.onmousedown = function(e){
      start = {
        x:e.offsetX,
        y:e.offsetY
      };
    }
    clipcanvas.onmousemove = function(e){
      if(start){
        fill(start.x,start.y,e.offsetX-start.x,e.offsetY-start.y)
      }
    }
    document.addEventListener("mouseup",function(){
      if(start){
        start = null;
        var url = startClip(clipArea);
        img.src= url;
      }
    })     
    function fill(x,y,w,h){
      ctx.clearRect(0,0,width,height);
      ctx.beginPath();
      //遮罩层
      ctx.globalCompositeOperation = "source-over";
      ctx.fillRect(0,0,width,height);
      //画框
      ctx.globalCompositeOperation = 'destination-out';
      ctx.fillRect(x,y,w,h);
      //描边
      ctx.globalCompositeOperation = "source-over";
      ctx.moveTo(x,y);
      ctx.lineTo(x+w,y);
      ctx.lineTo(x+w,y+h);
      ctx.lineTo(x,y+h);
      ctx.lineTo(x,y);
      ctx.stroke();
      ctx.closePath();
      clipArea = {
        x,
        y,
        w,
        h
      };
    }
    function startClip(area){
      var canvas = document.createElement("canvas");
      canvas.width = area.w;
      canvas.height = area.h;
       
      var data = clipCtx.getImageData(area.x,area.y,area.w,area.h);
       
      var context = canvas.getContext("2d");
      context.putImageData(data,0,0);
      return canvas.toDataURL("image/png");
    }       
  </script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js关闭当前页面(窗口)的几种方式总结
Mar 05 Javascript
防止浏览器记住用户名及密码的简单实用方法
Apr 22 Javascript
图解Sublime Text3使用技巧
Dec 21 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
小程序选项卡以及swiper套用(跨页面)
Jun 19 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
Jun 26 Javascript
鸿蒙系统中的 JS 开发框架
Sep 18 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 #Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 #Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 #Javascript
npm 语义版本控制详解
Sep 10 #Javascript
解决layui的input独占一行的问题
Sep 10 #Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 #Javascript
防止Layui form表单重复提交的实现方法
Sep 10 #Javascript
You might like
PHP添加MySQL数据记录代码
2008/06/07 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
require.js的用法详解
2015/10/20 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
详解django.contirb.auth-认证
2018/07/16 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
python实现代码统计器
2019/09/19 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
大专生自我评价
2014/01/28 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server