如何优雅的让网页支持 拖拽和粘贴图片【vue/html】


下面我用vue做个参考,不用vue的原生写法也类似。

1.创建组件

<template>
	<div @mouseover="handleMouseOver" @mouseleave="handleMouseLeave" @drop="handleDrop" @dragover.prevent tabindex="0">
		<slot></slot>
	</div>
</template>

<script>
	export default {
		name: "upLoadDiv",
		//emits:["change"], // vue3 事件声明
		created() {
			if (document != undefined) {
				//阻止了浏览器默认的文件打开行为
				document.addEventListener('dragover', (event) => {
					event.preventDefault();
				});

				document.addEventListener('drop', (event) => {
					event.preventDefault();
				});
			}
		},
		methods: {
			handleMouseOver() {
				document.addEventListener('paste', this.handlePaste);
			},
			handleMouseLeave() {
				document.removeEventListener('paste', this.handlePaste);
			},
			handlePaste(event) {
				if (event) {
					//console.log(event)
					const clipboardData = event.clipboardData || window.clipboardData;
					const files = clipboardData.files;
					console.log("files", files);
					if (files.length > 0) {
						const file = files[0];
						this.$emit('change', file);
					}
				}
			},
			handleDrop(event) {
				event.preventDefault();
				const files = event.dataTransfer.files;
				if (files.length > 0) {
					const file = files[0];
					this.$emit('change', file);
				}
			}
		}
	}
</script>

2.父组件使用

</template>
	</view>
		<upLoadDiv @change="upLoadChange">
			<view style="min-height: 100px;width:100%;background-color: #CCC;">
				<img mode="aspectFit" :src="UpLoadImgBase64" style="width: 100px;width: 100px;"></img>
			</view>
		</upLoadDiv>
	</view>
</template>


<script>
	export default {
		data() {
			return {
				UpLoadImgBase64: ""
			}
		},
		methods:{
			upLoadChange(file) {
				console.log(file)
				if (file.type.indexOf("image") == -1) return
				// const formData = new FormData();
				// formData.append('image', file);

				const reader = new FileReader();
				reader.onload = (e) => {
					this.UpLoadImgBase64 = e.target.result;
				};
				reader.readAsDataURL(file);
			}
		}
	}
</script>

solt内容自定义,我这边只是随便显示下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值