vue2编写文字由上到下渐变色,文字实时监控变化

文字效果如下:

这里是使用到HTML5的 canvas 编辑文字的方法

主要应用canvas图片背景渐变到文字的原理

这里文字渐变使用到的背景图如下:

1、在vue项目中新建组件 命名 textColor.vue

2、在textColor.vue组件下的代码如下:

<template>
  <div>
    <!-- 文字由上到下渐变色 -->
    <div>
      <canvas ref="canvas" width="230" height="32" class="text-color"></canvas>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    isShowText: {
      // 监听传入组件的数值
      type: Number,
      default: -1,
    },
  },
  data() {
    return { showText: -1 };
  },
  watch: {
    isShowText: {
      handler(value) {
        // 监听文字
        this.showText = value;
        console.log("监听文字--->", this.showText);
        this.$nextTick(() => {
          // 重置画布
          this.recreateCanvas();
        });
      },
      // immediate: true,
    },
  },
  mounted() {
    this.$nextTick(() => {
      // 初次生产的画布
      const canvas = this.$refs.canvas;
      this.drawGradientText(canvas);
    });
  },
  methods: {
    recreateCanvas() {
      // 销毁旧画布
      const canvas = this.$refs.canvas;
      const context = canvas.getContext("2d");
      // 清空画布 通过绘制透明背景来清空画布。这种方法可以确保在 Vue 组件中处理 <canvas> 元素时没有报错。
      context.clearRect(0, 0, canvas.width, canvas.height);
      // 创建新画布
      const newCanvas = document.createElement("canvas");
      newCanvas.width = 230;
      newCanvas.height = 32;

      // 替换旧画布
      canvas.parentNode.replaceChild(newCanvas, canvas);

      // 更新 ref 引用
      this.$refs.canvas = newCanvas;

      // 在此处可以调用绘制新画布内容的函数
      this.drawGradientText(newCanvas);
    },
    drawGradientText(canvas) {
      const _that = this;
      const ctx = canvas.getContext("2d");
      // 应用图片背景渐变到文字
      let backgroundImage = new Image();
      backgroundImage.src = require("../../assets/images/textColor.png");
      backgroundImage.onload = function () {
        let pattern = ctx.createPattern(backgroundImage, "repeat");
        ctx.fillStyle = pattern;
        ctx.font = "32px bold";
        let textSum = _that.showText && _that.showText > 0 ? _that.showText : 0;
        const hasLength = String(textSum).length; //判断数字是多少位数的数字
        // 数字位移到画布的展示位置
        switch (hasLength) {
          case 1:
            ctx.fillText(`${textSum}`, 90, 28);
            break;
          case 2:
            ctx.fillText(`${textSum}`, 80, 28);
            break;
          case 3:
            ctx.fillText(`${textSum}`, 70, 28);
            break;
          case 4:
            ctx.fillText(`${textSum}`, 60, 28);
            break;
          case 5:
            ctx.fillText(`${textSum}`, 50, 28);
            break;
          case 6:
            ctx.fillText(`${textSum}`, 40, 28);
            break;
          case 7:
            ctx.fillText(`${textSum}`, 30, 28);
            break;
          case 8:
            ctx.fillText(`${textSum}`, 20, 28);
            break;
          case 9:
            ctx.fillText(`${textSum}`, 10, 28);
            break;
          default:
            ctx.fillText(`${textSum}`, 1, 28);
            break;
        }
      };
    },
  },
};
</script>
<style lang="scss" scoped>
.text-color {
  width: 100%;
  height: 32px;
}
</style>

3、在父组件使用textColor.vue组件如下:

<template>
  <div>
    <textColor :isShowText="num && num > 0 ? num : 0" />
  </div>
</template>
<script>
import textColor from "@/views/components/textColor.vue";
export default {
  components: { textColor },
  data() {
    return { num: 0 };
  },
  methods: {},
};
</script>
<style scoped></style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flink输出中文乱码

flink输出中文乱码 &#xff08;1&#xff09;首先在/etc/profile.d/my_env.sh中加入下面这行数据 export LANGzh_CN.UTF-8&#xff08;2&#xff09;其次在flink配置文件中指定编码 [xxxhadoop102 flink-1.13.6]$ vim conf/flink-conf.yaml加入下面这行数据 env.java.opts:…

王春城 | 精益生产推进中如何建立有效的反馈机制?

在精益生产的推进过程中&#xff0c;建立有效的反馈机制是确保持续改进和高效运作的关键。一个健全的反馈机制能够及时发现问题&#xff0c;提供解决方案&#xff0c;并促进团队成员之间的有效沟通。下面将分享在精益生产环境中如何构建并运行一个有效的反馈机制。 一、明确反馈…

CDGA|数据治理新策略:完善分级分类,打破算法偏见枷锁

在数字化时代&#xff0c;数据已成为企业运营和社会发展的核心驱动力。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;数据治理的重要性也日益凸显。其中&#xff0c;数据分级分类和算法偏见等问题成为了当前数据治理面临的关键挑战。 数据分级分类&#xff1a;确保数据的…

【Java面试场景题】如何解决高并发下的库存抢购超卖少买问题?

一、问题解析 我相信很多人都看到过相关资料&#xff0c;但是在实践过程中&#xff0c;仍然会碰到具体的实现无法满足需求的情况&#xff0c;比如说有的实现无法秒杀多个库存&#xff0c;有的实现新增库存操作缓慢&#xff0c;有的实现库存耗尽时会变慢等等。 这是因为对于不…

国内AI行业对GPU算力的需求有多大?

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;算力作为支撑其持续进步的核心动力&#xff0c;在国内的重要性日益凸显&#xff0c;无论是海外还是国内&#xff0c;AI算力行业都呈现出蓬勃发展的态势&#xff0c;而国内对于AI算力的需求更是呈现出爆发式的…

1Panel开源面板项目GitHub Star数量突破20,000!

截至2024年6月25日9:00&#xff0c;FIT2CLOUD飞致云旗下开源项目——1Panel开源Linux服务器运维管理面板GitHub Star数超过20,000个&#xff01; 继Halo和JumpServer之后&#xff0c;1Panel成为飞致云旗下第三个GitHub Star数量超过20,000个的开源项目&#xff0c;也是飞致云旗…

Android studio Logcat 功能介绍

介绍 Android Studio Jellyfish版本下logcat功能&#xff0c;不同的tag会有不同的颜色&#xff0c;不同level等级的log默认也有不同的颜色。log过滤修改的更简洁了&#xff0c;原先的log视图只需要勾选就可以选择不同level的log了&#xff0c;当前需要在输入框中进行过滤器匹配…

OAuth 2.0资源授权机制与安全风险分析

文章目录 前言OAuth2.01.1 OAuth应用1.2 OAuth基础1.3 授权码模式1.4 其它类模式1.5 openid连接 安全风险2.1 隐式授权劫持2.2 CSRF攻击风险2.3 Url重定向漏洞2.4 scope校验缺陷 总结 前言 OAuth 全称为Open Authorization&#xff08;开放授权&#xff09;&#xff0c;OAuth …

odoo 去掉在线聊天的删除和编辑内容

描述 odoo在线聊天功能中,在原有的聊天记录中是可以进行编辑和删除的 这使得产生很多不可控原因,乱改,乱删等 所以要进行屏蔽此功能 优化前 优化后 升级 mail 模块刷新即可。 <Dropdown t-if="messageActions.actions.length gt quickActionCount"onStateCha…

[JS]DOM元素

介绍 DOM(Document Object Model---文档对象模型) 是浏览器提供的一套专门用来操作网页内容的API DOM树 把HTML文档以树状结构直观的表现出来, 称为文档数或者DOM树, DOM树直观的展示了标签与标签的关系 DOM对象 浏览器根据html标签生成的JS对象称为DOM对象 document对象 …

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

mybatis中动态sql语句like concat(“%“,#{xm},“%“)

1、动态SQL是一种可以根据不同条件生成不同SQL语句的技术&#xff0c;随着用户输入或外部条件变化而变化的SQL语句 2、SQL语句中的like模糊查询 xm like %小米%&#xff0c;但开发中经常用到 xm like concat("%",#{xm},"%")&#xff0c;可以防止sql注入…

半藏酒商业模式解读,半藏酱酒营销案例,半藏总院分院招商模式

半藏酱酒通过新零售模式&#xff0c;实现销售额快速增长。其模式包括私域营销、共享门店和DTC模式 入局酱酒市场短短4个月&#xff0c;销售额便破亿&#xff0c;15个月销售额突破6亿&#xff0c;还成立了700多家分院… 主要步骤是三个身份&#xff1a;分院、联创股东、个人股东…

Java毕设服务工作室

Java毕设服务工作室&#xff1a;专注提供高质量Java代码解决方案 在Java编程领域&#xff0c;毕业设计&#xff08;毕设&#xff09;项目往往需要大量的代码编写和调试。为了让同学们能够更专注于项目的核心逻辑和技术实现&#xff0c;Java毕设服务工作室应运而生&#xff0c;…

AME5268-AZAADJ 3A,28V,340KHz同步整流下行变换器芯片IC

一般说明 AME5268 是一款固定频率单片同步稳压器&#xff0c;可接受4.75V至28V的输入电压。两个低接通电阻的NMOS开关集成在模具上。采用电流模式拓扑结构&#xff0c;具有快速的暂态响应和良好的环路稳定性。 关断模式将输入电源电流降低到小于1μa。可调软启动…

2024系统分析师考试总结

考试缘由 我自己在毕业不久就考过了中级的软件设计师&#xff0c;这几年换到外企后事情不多&#xff0c;今年初定计划的时候就想着不如考个系统分析师吧。为什么选这个类别呢&#xff1f;按道理我主做程序开发&#xff0c;如果去考系统架构师通过率可能会大一些&#xff0c;但…

C++应用例程(判断质数、猜数字、爱心曲线)

一、判断质数 质数也叫素数&#xff0c;是指一个大于1的自然数&#xff0c;因数只有1和它自身。质数是数论中一个经典的概念&#xff0c;很多著名定理和猜想都跟它有关;质数也是现代密码学的基础。 判断一个数是否为质数没有什么规律可言&#xff0c;我们可以通过验证小于它的…

SpringBoot集成Druid数据库连接池并配置可视化界面和监控慢SQL

pom.xml <!-- Druid 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.23</version></dependency>application.yml spring:jackson:date-…

ONLYOFFICE 文档 8.1 发布:重塑文档处理

官网链接&#xff1a;ONLYOFFICE官网 一、PDF编辑器功能强大&#xff1a;创造跟随想象 在追求无界办公与高效创作的今天&#xff0c;ONLYOFFICE再次引领风潮&#xff0c;正式发布了其桌面编辑器的最新版本——ONLYOFFICE桌面编辑器8.1。这一版本不仅巩固了其作为顶级办公套件…

工业数据采集网关特别的功能之处

工业数据采集网关作为工业物联网&#xff08;IIoT&#xff09;系统的核心设备&#xff0c;承担着数据采集、传输和处理的关键任务。其特别功能不仅在于数据采集的广泛性和实时性&#xff0c;更在于其智能化、可扩展性和安全性。以下是工业数据采集网关的一些特别功能及其在工业…