前端之路:网页内容转图片,并且复制网页内容,并且优化体验。(截图插件Clipboard.js 的使用)。

做项目遇到一个比较奇葩的需求,觉得很有意思,记录下。方便以后回忆。

涉及框架(html2canvas.min.js   clipboard.mn.js):

直接连cdn

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<!--复制框架-->
<script src="https://cdn.bootcss.com/clipboard.js/2.0.1/clipboard.min.js"></script>
<!--页面DOM截图,即所谓的内容转图片,原理:是截图-->
<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script>

 

需求1:将指定页面内容转换成图片

闲话不多说了,直接上代码把。这是要截取的DOM,内容标签随意。正规就行。

<section class="content" style="margin: 20px auto;">
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容</p>
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容。</p>
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容</p>
</section>

截取相关代码:

$(".btn").on("click",function () {
      var dataUrl="",newImg="";
     //涉及2个参数,参数1:DOM对象,参数2,相关属性及属性方法。
      html2canvas($(".content"), {
          allowTaint: true,
          taintTest: false,
          //获取容器实际宽高,算上padding,border。
          height: $("content").outerHeight(),
          width: $("content").outerWidth(),
          // window.devicePixelRatio是设备像素比
          dpi: window.devicePixelRatio,
          onrendered: function (canvas) {
               //canvas转img,返回的是64位图片url。
              dataUrl = canvas.toDataURL("image/png", 1.0);
              //创建img标签
              newImg = document.createElement("img");
              //设置img标签url
              newImg.src = dataUrl;
              //移除原来的内容,即所有的P标签
              $($(".content p")).remove();
              //往容器追加img标签(已经赋值了src)
              $($(".content")).append(newImg);
              newImg.style.width = '100%';
          }
      });
    
});

截取的到指定容器。包括容器的边框。

 

需求2:复制指定容器页面内容。(是页面的内容跟截屏似的内容)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>target-div</title>
    <script src="https://cdn.bootcss.com/clipboard.js/2.0.1/clipboard.min.js"></script>
</head>
<body>
<!--复制的DOM对象-->
<section id="content" style="margin: 20px auto;">
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容</p>
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容。</p>
<p style="line-height:1.7em;font-size:18px;">内容内容内容内容内容内容内容</p>
</section>
<!--触发按钮,可随意-->
<button class="btn" data-clipboard-action="copy" data-clipboard-target="#content">Copy</button>
<!-- data-clipboard-target对应的是容器,我这里是id,则使用data-clipboard-target="#content" -->
<script>
    //这里强调一下,旧版本的是new Clipboard   。新版本则是ClipboardJS   。
    //注意一下版本。不然没有效果
    var clipboard = new ClipboardJS('.btn');
    clipboard.on('success', function(e) {
        //成功执行
        alert("复制成功");
    });
    clipboard.on('error', function(e) {
        //失败执行
        alert("复制失败");
    });
</script>
</body>
</html>

 

效果:

点击按钮,完成复制,但是要被复制的内容背景都有蓝色。这样的体验是不好的。所以最好是去掉这种蓝色背景。

优化:

鼠标选中一段文字,文字背景变蓝,
如何用JS 或 JQ取消它的选中状态?不是让一开始禁止选中文字,而是让已经选中的取消选中状态。以下是优化代码,只需要添加:

window.getSelection().empty();    这句代码就可以了
<script>
    //这里强调一下,旧版本的是new Clipboard   。新版本则是ClipboardJS   。
    //注意一下版本。不然没有效果
    var clipboard = new ClipboardJS('.btn');
    clipboard.on('success', function(e) {
        //成功执行
        alert("复制成功");

        //优化代码,取消选中时的蓝色背景
        window.getSelection().empty()
    });
    clipboard.on('error', function(e) {
        //失败执行
        alert("复制失败");
    });
</script>

效果:

这时候点击复制,复制成功,全程不会出现蓝色背景。

复制结果:

从粘贴结果看来,边框也能复制进去。当然也可以是 网页图片之类的。

(PS:如果不需要边框。就直接用.text()方法取内容就可以了。)

经验分享,不足之处,多多体谅。

新颖网络截屏插件是一款能够非常方便的将屏幕截屏图片发送到WEB服务器中的轻量级ActiveX控件,它可以非常方便的集成到您的博客,BBS,论坛,OA,或电子商务网站中,带给用户前所未有的用户体验。 同时新颖网络提供了ASP.NET(C#)和PHP的开发文档,和完善的ActiveX接口,您可以非常容易的使用和进行二次开发。最新版本的截屏控件极大的优化图片数据传输的效率,可以帮助用户节省约40%的上传时间。 相信新颖网络WEB截屏控件能够帮助您赢得市场。 产品特点如下: 1. 基于标准HTTP协议。 2. 支持Jpg图片格式。 3. 一流的用户体验,操作方便。 4. 增加截屏图片编辑器。可任意输入文字,绘制矩形箭头等。 5. 免费提供JavaScript SDK包,方便您将插件快速集成到已有网站中。 支持语言:PHP,JSP,ASP,ASP.NET(C#),ASP.NET(VB),C++,VC,VC.NET,VB,VB.NET,C#,C#.NET,Delphi,C++Builder 支持平台:Visual Studio 6.0/2002/2003/2005/2008/2010,C++ Builder 6.0/2009/2010,Delphi 7/2009,Visual Basic 6.0/2008 支持脚本:JavaScript,VBScript 支持系统:Windows NT,Windows 2003,Windows XP,Windows Vista,Windows 7,Linux 支持图片格式:PNG 产品介绍:http://www.cnblogs.com/xproer/archive/2010/08/09/1796077.html 在线演示-标准版:http://www.ncmem.com/products/screencapture/demo/index.html 在线演示-专业版:http://www.ncmem.com/products/screencapture/demo2/index.html 在线演示-CKEditor3.6.1:http://www.ncmem.com/products/screencapture/demo-ckeditor361/index_ckeditor361.html 布署文档:http://www.cnblogs.com/xproer/archive/2011/09/14/2176188.html 升级日志:http://www.cnblogs.com/xproer/archive/2010/12/04/1896399.html 开发文档-ASP.NET(C#):http://www.cnblogs.com/xproer/archive/2010/12/04/1896552.html 开发文档-PHP:http://www.cnblogs.com/xproer/archive/2011/05/16/2047915.html 开发文档-JSP:http://www.cnblogs.com/xproer/archive/2011/05/20/2051862.html 示例下载-标准版:http://www.ncmem.com/download/ScreenCapture-demo.rar 示例下载-专业版:http://www.ncmem.com/download/ScreenCapturePro-demo.rar 文档下载:http://www.ncmem.com/download/ScreenCapture-doc.rar VC运行库:http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf 联系邮箱:1085617561@qq.com 联系QQ:1085617561
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值