所有分类
  • 所有分类
  • 后端开发
Canvas神器html2canvas,让你轻松截图

Canvas神器html2canvas,让你轻松截图

这只是一个很简陋的小demo如有bug请提issues。2.将的DOM绘制成canvas来覆盖原始DOM界面如果采用原生的方法可以参照MDN下对于在canvas中绘制DOM的介绍。3.添加一张canvas模拟鼠标截图区域

告诉你件很厉害的事情,利用Canvas就能轻松完成截图。是不是超棒呀?

咱们先聊聊为啥这设计很重要,对不对?快捷键用多了难免混淆不清,因此我们决定开始就让用户随心所欲地设置。究竟该如何做?只需借助数组传递参数就能搞定!这下子,想要设置几个快捷键都没问题!

<pre class="brush:js;”>
function screenShot(quickStartKey, EndKey) {
//兼容性考虑不使用…扩展字符串
var keyLength = quickStartKey.length
var isKeyTrigger = {}
var cantStartShot = false

quickStartKey.forEach(function(item) { //遍历参数数组
isKeyTrigger[item] = false //默认数组中所有键都没有触发
})
$(‘html’).on(‘keyup’, function(e) {
var keyCode = e.which
if(keyCode === EndKey) {

} else if(!cantStartShot) {
isKeyTrigger[keyCode] = true
var notTrigger = Object.keys(isKeyTrigger).filter(function(item) {
return isKeyTrigger[item] === false //查看有没有需要触发的快捷键
})
if(notTrigger.length === 0) { //没有需要触发的快捷键即可以开始截图
cantStartShot = true
beginShot(cantStartShot)
}
}
})

你知道啥叫DOM画成canvas屏幕覆盖么?知道的话就去网上搜”DOM画到canvas”的教程看看具体该咋做。这个任务有点麻烦先得自己搞定一张SVG图片(全是XML元素)。然后,还有件更头疼的事儿,得搞清楚咋算浏览器里的DOM元素并把它们拖出来。不怕不怕!小编这儿有个神器——html2canvas,真是解决问题的好帮手!

接着讨论那个模型手绘截图的事。那时我还想用Canvas API解决,不过后来发现有些困难。跟PS似地,首先得在屏幕上拿着鼠标搞个画图区域,之后每挪个位置还要重新再画一次,最后把以前的删除掉,这样似乎才能称得上是实时绘制。但是,我翻来覆去找遍了所有资料,就是不知道怎么用纯粹的Canvas来实现。其实,有谁知道怎么加画布标签的话,别忘了告诉我

function beginShot(cantStartShot) {
    if(cantStartShot) {
        html2canvas(document.body, {
            onrendered: function(canvas) {
                //得到与界面一致的canvas图像
            }
        })
    }
}

Canvas神器html2canvas,让你轻松截图

别焦躁。试试看这个名叫Jcanvas的家伙,它就是以Jq为基础做成的神奇工具。这其中最好玩的部分就是图层!你想怎么搞就怎么搞,给每个图层都定个名儿也行。用上它,事情就变得轻松多了对不对?一切问题交给Jcanvas就没毛病!

Canvas画板里截图,主要就是提取图像数据,接着用’toDataURL’这个方法把图像变成能看明白的base64代码,搞定咯!

最后了,咱们来聊聊咋保存图片!这回,就靠a标签里面那个”download”属性,点击就能直接下了!

$('#' + canvasId).mousedown(function(e) {
    $("#"+canvasId).removeLayer(layerName) //删除上一图层
    layerName += 1
    startX = that._calculateXY(e).x //计算鼠标位置
    startY = that._calculateXY(e).y
    isShot = true
    $("#"+canvasId).addLayer({
        type: 'rectangle', //矩形
        ...
        name:layerName, //图层名称
        x: startX,
        y: startY,
        width: 1,
        height: 1
    })
}).mousemove(function(e) {
    if(isShot) {
        $("#"+canvasId).removeLayer(layerName)
        var moveX = that._calculateXY(e).x
        var moveY = that._calculateXY(e).y
        var width = moveX - startX
        var height = moveY - startY
        $("#"+canvasId).addLayer({
            type: 'rectangle',
            ...
            name:layerName,
            fromCenter: false,
            x: startX,
            y: startY,
            width: width,
            height: height
        })
        $("#"+canvasId).drawLayers(); //绘制
    }
    })

咔咔,全都弄好了!希望这些小知识点能让你学习棒棒哒!记得常来看看今天暂时先这样!期待你们喜欢。想问啥或给建议就在下边留言呗。别忘了点赞分享一气呵成,让更多人知道这个推送咯。谢谢大家伙儿!

var canvasResult = document.getElementById('canvasResult')
              var ctx = canvasResult.getContext("2d");
              ctx.drawImage(copyDomCanvas, moveX - startX > 0 ? startX : moveX, moveY - startY > 0 ? startY : moveY, width, height, 0, 0, width, height )
              var dataURL = canvasResult.toDataURL("image/png");

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/03/11645.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?