Vue实现base64编码图片间的切换功能

要实现Vue中base64编码图片间的切换功能,需要以下步骤:

1. 生成base64编码图片

使用FileReader对象和canvas元素可以将普通图片转化成base64编码图片,具体步骤如下:

// 生成base64编码图片
const file = e.target.files[0]
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => {
  const img = new Image()
  img.src = reader.result
  img.onload = () => {
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    canvas.width = img.width
    canvas.height = img.height
    ctx.drawImage(img, 0, 0, img.width, img.height)
    const base64Img = canvas.toDataURL('image/png', 1)
    this.base64Img = base64Img // 存储base64编码图片
  }
}

2. 实现切换功能

可以使用v-ifv-show指令来控制图片的显示与隐藏。具体步骤如下:

<template>
  <div>
    <button @click="showFirstImg">显示第一个图片</button>
    <button @click="showSecondImg">显示第二个图片</button>
    <img v-if="showFirst" :src="firstImg" />
    <img v-if="showSecond" :src="secondImg" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      showFirst: true,
      showSecond: false,
      firstImg: '', // 第一个图片的base64编码字符串
      secondImg: '', // 第二个图片的base64编码字符串
    }
  },
  methods: {
    showFirstImg() {
      this.showFirst = true
      this.showSecond = false
    },
    showSecondImg() {
      this.showFirst = false
      this.showSecond = true
    },
  },
}
</script>

示例一:

<template>
  <div>
    <label for="file">上传图片:</label>
    <input type="file" @change="convertFileToBase64" />
    <button @click="showImage">显示图片</button>
    <img v-if="show" :src="base64Img" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      base64Img: '', // 存储base64编码图片
      show: false,
    }
  },
  methods: {
    convertFileToBase64(e) {
      // 生成base64编码图片
      const file = e.target.files[0]
      const reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = () => {
        const img = new Image()
        img.src = reader.result
        img.onload = () => {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          canvas.width = img.width
          canvas.height = img.height
          ctx.drawImage(img, 0, 0, img.width, img.height)
          const base64Img = canvas.toDataURL('image/png', 1)
          this.base64Img = base64Img
        }
      }
    },
    showImage() {
      // 显示base64编码图片
      this.show = true
    },
  },
}
</script>

示例二:

<template>
  <div>
    <label for="file1">上传第一个图片:</label>
    <input type="file" id="file1" @change="convertFileToBase64(1)" />
    <label for="file2">上传第二个图片:</label>
    <input type="file" id="file2" @change="convertFileToBase64(2)" />
    <button @click="showFirstImg">显示第一个图片</button>
    <button @click="showSecondImg">显示第二个图片</button>
    <img v-if="showFirst" :src="firstImg" />
    <img v-if="showSecond" :src="secondImg" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstImg: '', // 第一个图片的base64编码字符串
      secondImg: '', // 第二个图片的base64编码字符串
      showFirst: true,
      showSecond: false,
    }
  },
  methods: {
    convertFileToBase64(index) {
      // 生成base64编码图片
      const file = index === 1 ? this.$refs.file1.files[0] : this.$refs.file2.files[0]
      const reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = () => {
        const img = new Image()
        img.src = reader.result
        img.onload = () => {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          canvas.width = img.width
          canvas.height = img.height
          ctx.drawImage(img, 0, 0, img.width, img.height)
          const base64Img = canvas.toDataURL('image/png', 1)
          if (index === 1) {
            this.firstImg = base64Img
          } else if (index === 2) {
            this.secondImg = base64Img
          }
        }
      }
    },
    showFirstImg() {
      // 显示第一个图片
      this.showFirst = true
      this.showSecond = false
    },
    showSecondImg() {
      // 显示第二个图片
      this.showFirst = false
      this.showSecond = true
    },
  },
}
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现base64编码图片间的切换功能 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • Vue项目中使用jsonp抓取跨域数据的方法

    使用jsonp抓取跨域数据是前端开发中常用的一种方法,而在Vue项目中使用jsonp抓取跨域数据则需要注意一些细节。下面是Vue项目中使用jsonp抓取跨域数据的完整攻略: 1.概述 前端的同学们都知道,由于浏览器的同源策略限制,导致 Ajax 请求不能跨域。而 JSONP 是一种跨域请求的解决方案,可以通过 script 标签来实现跨域请求。Vue.js …

    Vue 2023年5月28日
    00
  • 浅谈Vue的双向绑定和单向数据流冲突吗

    浅谈Vue的双向绑定和单向数据流冲突吗 双向绑定 Vue中的双向绑定是指数据的变化可以同时影响到视图和模型,即视图上的数据变化可以同步到模型中,模型中的数据变化也可以同步到视图中。双向绑定可以双方互相通讯,使得开发者更加方便地处理数据和界面。 双向绑定的实现原理是借助了 Object.defineProperty() 方法,将 data 中的数据属性由原本的…

    Vue 2023年5月27日
    00
  • Vue中请求本地JSON文件并返回数据的方法实例

    可以采用 Vue-Resource 插件来请求本地JSON文件,并解析返回的数据。 第一步,需要在项目中引入 Vue-Resource 插件。可以通过以下命令进行安装: npm install vue-resource –save 然后在 main.js 文件中引入 Vue-Resource 并使用: import Vue from ‘vue’; impo…

    Vue 2023年5月28日
    00
  • 详解Jest结合Vue-test-utils使用的初步实践

    下面我会详细讲解“详解Jest结合Vue-test-utils使用的初步实践”的完整攻略,并提供两个示例说明。 详解Jest结合Vue-test-utils使用的初步实践 简介 Jest是一个由Facebook开发的JavaScript测试框架,可以帮助我们编写高质量、可维护性强、易于扩展的测试代码。Vue-test-utils是一个用于Vue.js组件测试…

    Vue 2023年5月27日
    00
  • vue修改数据的时候,表单值回显不正确问题及解决

    针对“vue修改数据的时候,表单值回显不正确问题及解决”的问题,我们可以从以下几个方面来进行讲解和解决: 1. 问题描述 在使用Vue进行开发时,经常会遇到修改数据后表单值不回显的问题。例如,我们在表单中填写了一些信息后,提交表单后跳转到列表界面,在列表界面中点击编辑后修改数据,再跳转回来,但是此时表单中的值并没有回显修改的结果,仍然显示的是旧的数据。 2.…

    Vue 2023年5月29日
    00
  • vue实现数字动态翻牌的效果(开箱即用)

    下面是详细讲解“vue实现数字动态翻牌的效果(开箱即用)”的完整攻略: 背景 数字翻牌是一种常见的数字展示方式,适用于数字金融类、计数器、抽奖等场景。在这里我们将使用Vue.js实现数字动态翻牌的效果。 实现思路 数字动态翻牌的效果主要要用到CSS3动画和Vue动态绑定数据。首先需要用CSS3设置数字的动态翻牌效果,在Vue中通过监听数据变化来触发数字动态翻…

    Vue 2023年5月27日
    00
  • Vue基本使用之对象提供的属性功能

    Vue基本使用之对象提供的属性功能 Vue.js 是一款构建数据驱动的 Web 应用程序的前端框架,提供一系列的属性、指令和组件等功能,方便开发者进行页面开发和交互操作。 其中,Vue对象提供了一些常用的属性功能,本文将介绍Vue对象提供的属性功能的使用方法。 Vue实例中提供的属性 Vue提供了许多属性来控制实例中的数据和行为,以下是常用的一些属性: $d…

    Vue 2023年5月28日
    00
  • JS实现的简单标签点击切换功能示例

    首先来讲一下JS实现的简单标签点击切换功能示例的攻略。 1. 确定页面结构和元素 首先我们需要确定页面结构和需要被点击切换的标签元素。在示例中,我们可以使用HTML ul 和 li 标签来实现。 <ul class="tab"> <li class="active">标签1</li>…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部