vue 实现图片上传与预览,以及清除图片

vue写原生的上传图片并预览以及清除图片的效果,下面是demo,其中里面有vue获取input框value值的方法以及vue中函数之间的调用

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>图片demo</title>
	<link rel="stylesheet" href="../../css/font-awesome.css">
	<link rel="stylesheet" href="../../layui/css/layui.css">
	<!-- <link rel="stylesheet" href="../../css/layui_add.css"> -->
	<link rel="stylesheet" href="../../css/layui_add.css">
	<link rel="stylesheet" href="../../css/bass.css">
	<style type="text/css">
		.fun-set-bg{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;}
		.clears:after{
			clear: both;
			display: block;
			content: ‘‘;
			height: 0;
			overflow: hidden;
			visibility: hidden;
		}
		.fl{
			float: left;
		}
		.fr{
			float: right;
		}
		/*开关*/
		.layui-form-switch i{
			top: 2px;
		}
		.layui-form-switch em{
			top: -1px;
		}

		#app .layui-form-switch{
			margin-top: 0;
		}
		.fun-shar-body .main{
			width: 570px;
		}
		.fun-shar-body .fun-active-main-tips{
			color: #738299;
			font-size: 14px;
			line-height: 40px;
		}
		.fun-shar-body .fun-active-main-tips1{
			line-height: 30px;
		    font-size: 14px;
		    color: #b4c1d5;
		    margin-left: 150px;
		}
		.fun-active-main-tit{
			width: 140px;
			text-align: right;
			line-height: 40px;
			height: 40px;
			color: #424f65;
			margin-right: 10px;
		}
		.fun-shar-body,.fun-shar-msg,.fun-shar-img,.fun-shar-player-tit,.fun-shar-player-msg{
			margin-top: 20px;
		}
		.fun-shar-body .imgCon{
			width: 142px;
			height: 180px;
		}
		/* 分享图标 */
		.fun-shar-body .imgCon .img{
			width: 142px;
			height: 142px;
			background-color: #F5F5F5;
			text-align: center;
			line-height: 142px;
		}
		.fun-shar-body .imgCon .img>img{
			max-width: 100%;
			max-height: 100%;
			vertical-align: middle;
		}
		.fun-shar-body .clearBtn{
			padding: 0 10px;
			cursor: pointer;
			text-align: center;
			border-radius: 3px;
			line-height: 30px;
			border: 1px solid #ff6b7a;
			color: #ff6b7a;
			margin-left: 30px;
		}
		.fun-shar-body .clearBtn:hover{
			opacity: .8;
			filter: alpha(opacity=80);
		}
		.fun-shar-body .imgCon .upload{
			position: relative;
			width: 100%;
			height: 32px;
			text-align: center;
			line-height: 32px;
			cursor: pointer;
			background-color: #ff6b7a;
			margin-top: 6px;
			color: #fff;
			border-radius: 3px;
			overflow: hidden;
		}
		.fun-shar-body .imgCon .upload>input{
			height: 32px;
			position: absolute;
			right: 0;
			top: 0;
			cursor: pointer;
			opacity:0;
		}
		.layui-form-onswitch{
			border-color: #3aa1ff;
			background-color: #3aa1ff;
		}
		.layui-input:hover, .layui-textarea:hover{
			border-color: #3aa1ff!important;
		}
		.layui-input-block{
			margin-left: 0;
			line-height: 36px;
		}
		.fun-active-main-icon{
			line-height: 36px;
			height: 36px;
			margin-left: 5px;
		}
		.sha_btn{
			line-height: 36px;
			border:1px solid #3aa1ff;
			color: #fff;
			margin-right: 5px;
			padding: 0 15px;
			border-radius: 3px;
			background-color: #3aa1ff;
			margin-left: 10px;
			cursor: pointer;
		}
		.sha_btn:hover,.sha_btn:active{
			opacity:.8;
			filter: alpha(opacity=80);
		}
	</style>
</head>
<body>
<div id="app">
	<!-- 分享设置标题 -->
	<div class="fun-set-bg">{{msgTitle}}</div>
	<form class="layui-form" action="">

            <!-- 分享图标 -->
            <div class="fun-shar-img clears">
                <p class="fun-active-main-tit fl">图片:</p>
                <div class="imgCon fl">
                    <div class="img"><img id=‘imgshow‘ :src="imgUrl"  ></div>
                    <div class="upload">上传图片
						<input ref="extraFile"
						class="file-item"
						type="file"
						@change="changeImg" >
                    </div>

                </div>

                <div class="clearBtn fl" @click=‘clearImgUrl‘>清除图片</div>
            </div>
             <input type="text" v-model=‘formInput‘>
		<input type="text" ref=‘textCon‘>
	</form>
	<button @click=‘btnClick‘ class="sha_btn" v-show=‘detailShow‘>保存</button>
</div>
<script type="text/javascript" src="../../js/jquery_v3.3.1.js"></script>
<script type="text/javascript" src="../../js/bass.js"></script>
<script type="text/javascript" src="../../layui/layui.all.js"></script>
<script src="../../layui/layui.js"></script>
<script src="../../js/vue-router.js"></script>
<script src="../../js/vue.js"></script>
<script>
	var vm = new Vue({
		el:‘#app‘,
		data:{
			msgTitle:‘分享设置‘,
			activeName:‘{{活动名称}}‘,
			userName:‘{{name}}‘,
			userId:‘{{Id}}‘,
			imgUrl:‘../../images/banner1.jpg‘,
			detailShow:true,
			formInput:‘‘,
			playerInfo:‘‘,
			textCon:‘‘,
			shaDes:‘‘,
			extraFile:‘‘,
		},
		mounted(){
			// this.formData()
		},
		beforeMount(){
			this.initForm()
		},
		methods:{
			initForm(){
				layui.use(‘form‘, function(){
					var form = layui.form;
					form.on(‘switch(fun-shar-switchs)‘, function(data){
						if(this.checked == true){
						    $(this).val(1);
						    layer.msg(‘开启‘);
						}else{
						    $(this).val(0);
						    layer.msg(‘关闭‘);
						}
						return false;
					})
				})
			},
			// 上传图片
		    changeImg(e) {
		      console.log(e, ‘1111‘)
		      var that = this
		      var file = e.target.files[0] || e.dataTransfer.files[0]
		      var fileSize = file.size || file.fileSize
		      var fileName = file.name
		      var len = e.target.classList.length
		      console.log(file.size, ‘2111‘)
		      if (file.name.lastIndexOf(‘.‘) === -1) {
		        this.$message.info(‘路径不正确‘)
		        return false
		      }
		      var AllImgExt = ‘.jpg|.jpeg|.gif|.bmp|.png|.swf‘
		      var extName = file.name.substring(file.name.lastIndexOf(‘.‘)).toLowerCase()
		      if (AllImgExt.indexOf(extName + ‘|‘) === -1) {
		        this.$message.info(‘非法图片格式‘)
		        return false
		      }
		      if (fileSize < 3145728) {
		        if (window.FileReader) {
		          var reader = new FileReader()
		          reader.readAsDataURL(file)
		          reader.onload = (e) => {
		            console.log(e.target + ‘img‘)
		            console.log(e.target.result + ‘img‘)
		            // that.$refs.imgzs.src = e.target.result
		            if (len > 1) {
		              that.form.wx_share_img_url = fileName
		              that.formData.set(‘share_img‘, file)
		              console.log(file, ‘share_img‘)
		              // that.formData.set(‘share_img‘, e.target.result)
		            } else {
		              console.log(file, ‘list_img‘)
		              // that.form.extra = fileName
		              // that.formData.set(‘list_img‘, file)
		            }
		            $(‘#imgshow‘).get(0).src = e.target.result;                             this.imgUrl = e.target.result;
		            that.isUploadImg = true
		          }
		        }
		      } else {
		        this.$message.info(‘图片大小超过限制‘)
		        return false
		      }
		    },
			clearImgUrl(){//请出图片
				alert(‘清除图片‘);
				$(‘.img img‘).attr(‘src‘, ‘##‘);
			},
			btnClick(){//点击提交按钮
				let formInput = this.formInput;
				let textCon = this.textCon;
				let playerInfo = this.$refs.playerInfo.value;
				let shaDes = this.shaDes;                   let imgUrl = this.imgUrl;
				console.log(this.formInput);
				console.log(this.$refs.playerInfo.value);
				console.log(this.textCon);
				console.log(shaDes+‘;‘+imgUrl);
				// this.postReq(formInput, textCon, playerInfo, shaDes, imgUrl);//请求
			},
			postReq( formInput, textCon, playerInfo, shaDes, imgUrl){
				this.$http.post(‘/path/aa‘,{parem:formInput,parem2:textCon,parem3:playerInfo,parem4:shaDes,pare5:imgUrl},{emulateJSON:true}).then( res => {
					//成功执行
					console.log(res)
				}, error => {
					console.log(‘出现异常‘)
				})
			},
			isShowCon(){
				let flag = true;
				if (this.detailShow) {
					this.detailShow = false;
				}else{
					this.detailShow = true;
				}
			}
		},

	})
</script>
</body>
</html>

  参考网址:https://www.cnblogs.com/qdlhj/p/10385168.html

原文地址:https://www.cnblogs.com/lvxisha/p/10772917.html

时间: 2024-08-01 10:48:04

vue 实现图片上传与预览,以及清除图片的相关文章

用Ajax图片上传、预览、修改图片

首选图片的上传和下载并不是很难,但要注意细节. 一,给出前端图片上传的html代码 1.图片上传的控件 <img src="/${res}/images/default.png" alt="" class="backimg"> <form method="post" id="imgform" enctype="multipart/form-data" action=&q

input file实现多选,限制文件上传类型,图片上传前预览功能

限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② multiple 属性规定输入字段可选择多个值. 示例: <!-- image/* 所有图片 image/png png图片 image/jpg jpg图片 image/gif gir动图 application/msword Word文档(.doc) application/vnd.openxmlform

html之file标签 --- 图片上传前预览 -- FileReader

记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了其他方式来实现了这个功能. 今天无意发现了一个知识点,用html的file标签就能实现图片上传前预览,感觉很棒,记录一下!就是通过file标签和js的FileReader接口,把选择的图片文件调用readAsDataURL方法,把图片数据转成base64字符串形式显示在页面上. 1.闲话少说,测试一下,图片上

[转]html之file标签 --- 图片上传前预览 -- FileReader

记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了其他方式来实现了这个功能. 今天无意发现了一个知识点,用html的file标签就能实现图片上传前预览,感觉很棒,记录一下!就是通过file标签和js的FileReader接口,把选择的图片文件调用readAsDataURL方法,把图片数据转成base64字符串形式显示在页面上. 1.闲话少说,测试一下,图片上

图片上传时预览插件

html代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="uploadView.js" type="text/javascript"></script> <script> window.

js实现图片上传及预览----------------------&gt;&gt;兼容ie6-8 火狐以及谷歌

<head runat="server"> <title>图片上传及预览(兼容ie6/7/8 firefox/chrome)</title> <script src="../Scripts/jquery-1.4.2.min.js" type="text/javascript"></script> </head> <body> <form id="f

js实现图片上传本地预览

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content

JQuery插件:图片上传本地预览插件,改进案例一则。

/* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *插件网站:http://keleyi.com/keleyi/phtml/image/16.htm *参数说明: Img:图片ID;Width:预览宽度;Height:预览高度;ImgType:支持文件类型;Callback:选择文件显示图片后回调方法; *使用方法: <div> <img id

js 图片上传本地预览

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>图片上传本地预览</title> <style type="text/css"> #preview{width:260px;height:190px;border:1px solid #000;overflow:hidden;