原生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 相关文章推荐
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
Javascript 按位取反运算符 (~)
Feb 04 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
JavaScript实现分页效果
Mar 28 Javascript
bootstrap是什么_动力节点Java学院整理
Jul 14 Javascript
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
vuex进阶知识点巩固
May 20 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 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
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
FF IE兼容性的修改小结
2009/09/02 Javascript
ExtJS 入门
2010/10/29 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
javascript实现无限级select联动菜单
2015/01/02 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
Django如何实现内容缓存示例详解
2017/09/24 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
怎么快速自学python
2020/06/22 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
组织关系转移介绍信
2014/01/16 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书