自己整理的vue实现生成分享海报(含二维码),看着网上的没实现

简介: 自己整理的vue实现生成分享海报(含二维码),看着网上的没实现

大家好,我是雄雄。


前言

相信大家在许多的场景下,看到过这样的案例。

  1. 当我们在某购物app上看好一件商品,想分享给别人时,app会给我们生成一张海报,我们将其保存在手机里面转发给其他人达到分享。
  2. 当我们逛CSDN的时候,想要将某篇有营养的文章分享给别人时,也会生成一张好看的海报,用户只需一扫码,既能跳转到相应页面浏览。
  3. 在某些个人博客,比如:穆雄雄的博客中,我们看到某篇正合胃口的文章,想要分享给别人怎么办?也会生成一张精美小海报,然后随便转发。

今天,我们就来看看,如何使用vue实现精致海报的分享。

效果图



类似这样的吧,下面的是CSDN的,上面的是我自己做的,可能不如CSDN做的专业,但是我的那种,你的背景图片是可以自己换的,所以如果你的审美比较好,那么你可以自己设计一个背景图,或者多张进行随机切换,我这边就是提供一下实现思路。

右下角是这篇文章的二维码,一扫就自动跳转过来了。

实现思路

  1. 准备一张精美的背景图,比如我这样的。(也可以准备多张,实现随机切换,实现代码我明天放上来),我的放在了七牛云里面了,大家也可以直接放在本地。
  2. 将当前内容生成一个二维码,放在右下角的位置,技术:qrcodejs2
  3. html转换成canvas,技术:html2canvas
  4. 按照自己想要的格式调整下样式即可。

其实思路,我看网上大家都是这么说的,我确实也是这么做的,但是按照网上的代码,确实也没有实现出来,所以自己写了个。

代码实现

  1. 安装qrcodejs2以来
npm i qrcodejs2

2. 安装html2canvas依赖

npm i html2canvas

3. 在需要生成海报的页面,分别导入这两个依赖。

/*引入二维码*/
import QRCode from "qrcodejs2";
//html转换成canvas
import html2canvas from "html2canvas";
  1. 在页面上写个div,用来存放海报的,我这是放在了el-dialog里面了,各人有各人的需求。
<!--分享海报的弹出层-->
    <el-dialog
      width="20%"
      height="200px"
      center
      :visible.sync="dialogFengXiang"
    >
      <!-- 海报html元素 -->
      <div id="posterHtml" v-show="isShowBg">
        <div class="fx_content ">
          <span style="color: #000000;font-size: 16px">{{ posterTitle }}</span>
          <p style="font-size: 12px;">
            关注微信订阅(公众)号【雄雄的小课堂】;
            <br />
            博客网址:https://www.穆雄雄.com
          </p>
        </div>
        <!-- 二维码 -->
        <div id="qrcodeImg" ref="qrcodeImg"></div>
      </div>
    </el-dialog>
  1. 大致设置一下样式吧,在style里面写:
/*分享的内容*/
.fx_content {
  width: 70%;
  float: left;
  margin: 109% 0 0 2%;
}
/*整个海报*/
#posterHtml {
  background-image: url(https://blogobs.88688.team/blog/fx-bg1.png);
  background-repeat: no-repeat;
  width: 100%;
  height: 450px;
  background-size: 100% 450px;
  margin: 0;
  padding: 0;
}
/*二维码*/
#qrcodeImg {
  width: 25%;
  height: 150px;
  float: right;
  margin-top: 108%;
}
  1. data中声明变量:
data: function() {
    return {
   // 文案标题
      posterTitle: "",
      // 文案内容
      posterContent: "",
      // 最终生成的海报图片
      posterImg: "",
      isShowBg: false,
      //是否显示对话框
      dialogFengXiang: false
      };
     },
  1. methods中实现两个功能,生成二维码和生成海报:
//分享的功能
    fenxiang() {
      this.createPoster();
      this.createQrcode();
      this.dialogFengXiang = true;
    },
    // 生成二维码
    createQrcode() {
      this.$refs.qrcodeImg = "";
      setTimeout(() => {
        // 生成二维码
        new QRCode(this.$refs.qrcodeImg, {
          text: this.articleHref,
          width: 75,
          height: 75,
          colorDark: "#000000",
          colorLight: "#ffffff",
          correctLevel: QRCode.CorrectLevel.H
        });
      }, 200);
      // qrcode.makeCode(text);
    },
    //生成海报
    createPoster() {
      // 生成海报
      const vm = this;
      //重新弄一下标题
      //let content = this.article.content.substring(0,110);
      /*let content = "";
      this.posterContent = content+"....";*/
      this.posterTitle = this.article.title.substring(0, 12) + "....";
      const domObj = document.getElementById("posterHtml");
      //显示海报
      this.isShowBg = true;
      html2canvas(domObj, {
        useCORS: true,
        allowTaint: false,
        logging: false,
        letterRendering: true,
        onclone(doc) {
          let e = doc.querySelector("#posterHtml");
          e.style.display = "block";
        }
      }).then(function(canvas) {
        // 在微信里,可长按保存或转发
        vm.posterImg = canvas.toDataURL("image/png");
      });
    },

当然,这里面的部分代码也是从网上看的别人的,拼拼凑凑出来的,我在他们的基础上改了改。

然后我们就实现生成海报的功能啦。

目录
打赏
0
0
0
0
57
分享
相关文章
|
10天前
|
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
65 4
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
160 13
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
4月前
|
vue使用iconfont图标
vue使用iconfont图标
215 1
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
175 12
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。

相关实验场景

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等