vue项目中显示图片下载(使用vant的图片预览)

<template>
  <van-image-preview v-model="isShowImg" :images="image" @change="imgChange">
    <div slot="cover" class="color-high">
      <van-icon name="down" class="down-img" @click="downLoadHandle"/>
    </div>
  </van-image-preview>
</template>
//想要让下载图标显示,要改变van-image-preview__cover的属性(自己写,还要修改vant的官网css样式,不然图标没有显示)
.van-image-preview__cover{
  bottom:20% !important;
  left:44% !important;
}

在这里插入图片描述

<script>
import {ImagePreview} from 'vant';//从vant导入图片预览组件
export default{
	//传入的参数
	props:{
		isShow:Boolean,//控制是否显示组件
		image:{type:Array,default(){return []}},//要显示的数组,简单数组格式,
	},
	computed:{
		//必须重新在组件中定义一个控制组件显示的值,不然会报错
		isShowImg:{
			set(val){this.$emit('close'),val},//用于父组件接受,改变isShow的值
			get(){return this.isShow}
		}
	},
	data(){
		return{
			index:0,//图片的下标
		}
     },
     methods:{
     	downloadHandle(){
			let image = new Image();
			image.setAttribute('crossOrigin','anonymous');
			let _this=this;
			image.onload = function(){
				let canvas = document.createElement('canvas');
				canvas.width = image.width;
				canvas.height = image.height;
				let context = canvas.getContext("2d");
				context.drawImage(image,0,0,image.width,image.height);
				let url = canvas.toDataURL(_this.image(_this.index));
				let a =document.createElement('a');
				let event = new MouseEvent('click');
				a.download = Math.random()*1000+'.jpg'||'photo';
				a.href=url;
				a.dispatchEvent(event)	
			}
			image.src=_this.image(_this.index);
		},
		imgChange(index){this.index=index;}
     }
}

</script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5)父组件调用

<template>
	<image-preview :isShow="isShow" :image="filex" @close="closeImg"></image-preview>
	//此处的filex必须是简单的数组['1','2']
</template>

<script>
import ImagePreview from '组件路径'
</script>

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用Vant-UI的van-uploader组件实现头像图片上传的代码示例: 1. 首先,安装vant-ui和axios: ``` npm install vant axios --save ``` 2. 在Vue项目引入Vant-UI和axios: ``` import Vue from 'vue'; import Vant from 'vant'; import 'vant/lib/index.css'; import axios from 'axios'; Vue.use(Vant); Vue.prototype.$axios = axios; ``` 3. 在Vue组件使用van-uploader组件: ``` <template> <van-uploader :disabled="uploadDisable" :before-read="beforeRead" :after-read="afterRead" :preview-options="{closeable: true}" :max-count="1" accept="image/*" :value="avatarUrl" :deletable="deletable" :show-upload="false" > <img v-if="avatarUrl" :src="avatarUrl" class="avatar"/> <div v-else class="avatar-placeholder"></div> </van-uploader> </template> <script> export default { data() { return { avatarUrl: '', // 上传成功后图片的地址 deletable: true, // 是否可删除已上传的图片 uploadDisable: false, // 是否禁用上传功能 } }, methods: { beforeRead(file) { // 上传前的处理逻辑,如判断图片大小、类型等 // 返回false阻止上传,返回true执行上传操作 return true; }, afterRead(file) { // 上传成功后的处理逻辑 // file对象包含上传成功后的图片信息 // file.url即为上传成功后的图片地址 this.avatarUrl = file.url; }, }, } </script> <style> .avatar { width: 80px; height: 80px; border-radius: 50%; margin-right: 10px; } .avatar-placeholder { width: 80px; height: 80px; border-radius: 50%; margin-right: 10px; background-color: #f5f5f5; } </style> ``` 以上代码,van-uploader组件的各个属性含义如下: - :disabled:是否禁用上传功能; - :before-read:上传前的处理逻辑,返回false阻止上传,返回true执行上传操作; - :after-read:上传成功后的处理逻辑,file对象包含上传成功后的图片信息,file.url即为上传成功后的图片地址; - :preview-options:图片预览的配置项,如是否可关闭等; - :max-count:上传图片数量的最大值; - accept:限制上传图片的类型; - :value:上传成功后图片的地址; - :deletable:是否可删除已上传的图片; - :show-upload:是否显示上传按钮。 在实现头像上传时,我们只需将:before-read和:after-read方法的上传逻辑改为上传头像即可。同时,需要在组件定义avatarUrl变量,用于保存上传成功后的头像地址,并在van-uploader组件的:value属性和<img>标签的:src属性使用该变量,实现上传成功后的头像预览效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值