前端界面网页截图(干货)

news2025/1/19 14:26:42

如果可以实现记得点赞分享,谢谢老铁~

看了一些谷歌插件,可以对网页进行局部截图或者是整个网页截图,于是想着弄个demo,关于前端的截图。最后选择了 html2canvas

1.下载安装包

Install NPM

npm install --save html2canvas

或者
Install Yarn

yarn add html2canvas

2.先看效果图

在这里插入图片描述

  • 点击【局部截图】按钮可以自定义指定想要的位置
  • 点击【整个网页截图】按钮将整个网页截图

3.代码演示

vue文件

 <script setup lang="ts">
    import {onMounted,toRef } from "vue";
    import html2canvas from "html2canvas";
    let imgUrl: any = toRef('')
    // 生成快照
    const convertToImage = (container, options?:  any) => {
        // 设置放大倍数
        const scale = window.devicePixelRatio;

        // 传入节点原始宽高
        const _width = container.offsetWidth;
        const _height = container.offsetHeight;
        if(options){
            let { width, height } = options;
            width = width || _width;
            height = height || _height;

        }
      

        // html2canvas配置项
        const ops = {
            scale,
            // width,
            // height,
            useCORS: true,
            allowTaint: false,
            ...options
        };
        return new Promise((resolve) => {
         html2canvas(container, ops).then(canvas => {
            //   document.body.appendChild(canvas);  // 直接是一个canvas图片
            
            // 返回图片的二进制数据
            // return canvas.toDataURL("image/png");
             // let dataURI = canvas.toDataURL('image/' + format, quality);  ps:  弃用
            // 生成的Base64图片将比使用toDataURL方法生成的小得多,并且可以方便地在浏览器中显示和处理。
           canvas.toBlob((blob: any) => {
                    const reader = new FileReader();
                    reader.readAsDataURL(blob);
                    reader.onloadend = () => {
                        resolve(reader.result);
                    }
                }, 'image/jpeg');
            });
        });
    }
    const clickBtn = async (num) => {
        let imgBlobData: any = ''
        // 调用函数,取到截图的二进制数据,对图片进行处理(保存本地、展示等)
        if(num === 1){
            // 局部
            imgBlobData =  await convertToImage(document.getElementById('content'));
        }else if(num === 2){
            // 整个网页
            imgBlobData = await convertToImage(document.body);
        }
        
        imgUrl.value = imgBlobData
       
    }
</script>
<template>
<div class="contrainer">
    <div>
        <h1>要呈现的HTML内容:</h1>
        <div id="content">将此元素中的内容仅渲染到现有的画布元素上</div>
    </div>
    <div>
         <h1>现有画布:</h1>
        <div class="img"> 
            <a-image :src="imgUrl"></a-image>
        </div>
    </div>
    <div class="btnCon">
       <a-button
            class="btn"
            size="large"
            @click="clickBtn(1)"
            >局部截图</a-button
          >
      <a-button
            class="btn"
            size="large"
            @click="clickBtn(2)"
            >整个网页截图</a-button
          >
    </div>
    
</div>
  
</template>
    <style>
        .contrainer{
            display: flex;
            flex-direction: column;
        }
        .img {
            width: 500px;
            height: 300px;
            border: 1px solid black;
        }
        .btnCon{
            display: flex;
        }
        .btn {
            cursor: pointer;
            width: 200px;
            margin: 20px 20px;
        }
        #content {
            background: rgba(100, 255, 255, 0.5);
            padding: 50px 10px;
        }

    </style>

重点在于

html2canvas(document.querySelector("#capture")).then(canvas => {
    document.body.appendChild(canvas)
});

收工!谢谢老铁们的点赞收藏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态

2023年11月 NearCon2023 活动期间&#xff0c;基于 Cosmos SDK 构建的隐私协议 Secret Network&#xff0c;宣布使用 Octopus Network 开发的 NEAR-IBC&#xff0c;于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…

大模型幻觉成应用落地难题 最新评测文心一言解决幻觉能力最好文心一言解决幻觉能力最好 或成产业应用首选

“林黛玉倒拔垂杨柳”、“月球上面有桂树”、“宋江字武松”……相信经常使用大语言模型都会遇到这样“一本正经胡说八道”的情况。这其实是大模型的“幻觉”问题&#xff0c;是大模型行业落地的核心挑战之一。例如幻觉会影响生成内容的可靠性&#xff0c;对于法律、金融、医疗…

通用人工智能:迈向智能革命的下一步

原创 | 文 BFT机器人 AGI&#xff0c;全称为Artificial General Intelligence&#xff0c;中文翻译为“通用人工智能”&#xff0c;亦被称作强AI&#xff0c;是人工智能研究领域长期探讨的重要议题。此概念指的是在人类可能涉及的所有专业领域内&#xff0c;具备与人类智慧相当…

搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案

Varjo 的人眼分辨率混合现实和虚拟现实头显将医疗专业人员的注意力和情感投入提升到更高水平。借助逼真的 XR/VR&#xff0c;医疗和保健人员可以为最具挑战性的现实场景做好准备&#xff01; 在虚拟、增强和混合现实中进行最高水平的训练和表现 以逼真的 3D 方式可视化医疗数据…

如何将本地Portainer管理界面结合cpolar内网穿透工具实现远程浏览器访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

时间同步时钟小课堂——常用的对时方式有哪些?

目前常用的对时信号有NTP 网口、B码、串口、脉冲等授时方式&#xff0c;分别介绍如下 1、NTP授时&#xff1a; 是基于NTP 协议实现网络授时的。NTP网络时钟同步协议是目前国际互联网通用的时间服务协议。NTP 协议采用 client/Server架构&#xff0c;基于 UDP/IP&#xff0c;使用…

js构造函数之工厂模式(学习笔记1)

目录 一、简单工厂 1、存储一个用户信息 2、存储N个用户信息 3、存储N个用户信息不同年龄用户有不同美食的搭配方案【简单工厂模式】 二、抽象工厂模式 1、抽象工厂(AbstractFactory) 2、具体工厂&#xff08;ConcreteFactory&#xff09; 3、生产新款手机 4、总结 本…

No matching version found for zr-map-ol@1.1.19.

问题描述&#xff1a; 通常情况下直接安装可能还会报错&#xff0c;因为有的依赖包是在私库里的 解决方法&#xff1a; 1.查看模块的注册信息 2. 安装 如果上面这种方式安装之后npm i还是报错&#xff0c;试试下面这种方式(我没有试下面的方式 上面的已经解决掉了) 具体可以参…

医疗器械展示预约小程序的效果如何

医疗器械行业涵盖的内容非常广&#xff0c;市场中大小从业的品牌/门店也很多&#xff0c;比如我们常见的轮椅、康复器械、拐杖、血压仪等产品市场需求都非常高&#xff0c;当然还有医院里用的器械等。 医疗器械市场呈现多品牌、多门店的发展趋势&#xff0c;虽然这些东西不是必…

Rust开发——使用rust实现Redis中hset

一、Redis中hset HSET 是 Redis 中用于在哈希数据结构中设置指定字段的值的命令。哈希是一种类似于字典或映射的数据结构&#xff0c;它存储了键值对的集合&#xff0c;其中每个键都包含多个字段和与这些字段相关联的值。 哈希表在 Redis 中以键值对形式存储&#xff0c;并通…

macos 配置ndk环境

选择Android Studio下默认的ndk环境 mac电脑的ndk默认路径一般是 /Users/user_name/Library/Android/sdk/ndk/version_code 其中user_name为自己电脑的用户名&#xff0c;version_code为自己ndk安装的版本号&#xff0c;比如我这里电脑的ndk路径就是 /Users/zhangsan/Libra…

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

文章目录 先看本次实现的最终效果前言素材一、绘制路径点和连线1. 新建Waypoint &#xff0c;绘制路径点和连线2. 绘制路径点按钮效果3. 显示路径顺序文本4. 实时修改路径点位置 二、生成敌人1. 固定生成敌人配置2. 随机生成敌人配置 三、对象池创造敌人四、控制敌人沿前面绘制…

计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法

7.计算属性 7-1计算属性-有缓存 模板中的表达式虽然很方便,但是只能做简单的逻辑操作,如果在模版中写太多的js逻辑,会使得模板过于臃肿,不利于维护,因此我们推荐使用计算属性来解决复杂的逻辑 <!DOCTYPE html> <html lang"en"> <head><meta …

DP4306F—Sub-1G无线收发通信芯片

DP4306F是一款高性能低功耗的单片集成收发机&#xff0c;工作频率可覆盖200MHz~1000MHz&#xff0c;集成M0核MCU&#xff0c;支持230 / 408 / 433 / 470 / 868 / 915频段。该芯片集成了射频接收器、射频发射器、频 率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以…

spark性能调优 | 默认并行度

Spark Sql默认并行度 看官网&#xff0c;默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数&#xff0c;不要使基数) 拓展 在本地 task需要自己设置&a…

LTE信令流程及业务流程

1、Attach过程 完成完成鉴权、身份验证、用户注册以外&#xff0c;包含默认承载的建立 1)在LTE网络中&#xff0c;PDN连接是默认承载的建立&#xff0c;它是在EPS承载中建立的&#xff0c;主要用于在UE和PDN之间传输数据。 2)在建立PDN连接时&#xff0c;会通过EPS隧道连接到PD…

算法笔记-第五章-素数

算法笔记-第五章-素数 素数判断打印素数表c代码c 代码 最大素数最小素数孪生素数 素数判断 //素数 #include <cstdio> #include <cmath>bool isPrime(int n) {if (n < 1) //已知一个素数判断&#xff1a;条件就是n是否能被2&#xff0c;&#xff0c;&#xff0…

ES聚合与分组查询取值参数含义(Java api版本)

一、说明 在项目中使用Elasticsearch的聚合与分组查询后,对于返回结果一脸懵逼,查阅各资料后,自己总结了一下参数取值的含义,不一定全面,只含常见参数 二、分组查询 2.1 参数解释 SearchResponse<Map> searchResponse null;try {searchResponse client.search(s ->…

CentOS中安装常用环境

一、CentOS安装 redis ①&#xff1a;更新yum sudo yum update②&#xff1a;安装 EPEL 存储库 Redis 通常位于 EPEL 存储库中。运行以下命令安装 EPEL 存储库 sudo yum install epel-release③&#xff1a;安装 Redis sudo yum install redis④&#xff1a;启动 Redis 服…

哪种猫罐头比较好?推荐给新手养猫的5款好口碑猫罐头!

新手养猫很容易陷入疯狂购买的模式&#xff0c;但有些品牌真的不能乱买&#xff01;现在的大环境不太好&#xff0c;我们需要学会控制自己的消费欲望&#xff0c;把钱花在刀刃上&#xff01;哪种猫罐头比较好&#xff1f;现在宠物市场真的很内卷&#xff0c;很多品牌都在比拼产…