自定义上传图片按钮 实现图片的预览和切换
2017-12-25 18:14
381 查看
功能:自定义上传按钮的样式,初始样式的透明度为0,设置自己想要的样式,同时可以实现上传图片的预览。
HTML代码:
CSS代码:
* {
margin: 0;
padding: 0;
list-style: none;
}
body {
position: relative;
}
span {
display: inline-block;
width : 90px;
height: 35px;
line-height: 35px;
border: 1px solid #ccc;
border-radius: 5px;
text-align: center;
}
input[type="file"] {
width: 100px;
height: 40px;
position: absolute;
top: 0;
left: 0;
z-index: 100;
opacity: 0;
}
div {
width: 200px;
height: 100px;
display: none;
margin: 15px;
position: relative;
}
div img {
width: 100%;
height: 100%;
}
div p {
width: 200px;
position: absolute;
right: -230px;
bottom: 0;
line-height: 35px;
}
ul {
width: 600px;
height: 350px;
}
ul li {
width: 170px;
height: 100px;
float: left;
margin-right: 5px;
margin-bottom: 5px;
}
ul li img {
width:100%;
height:100%;
display: inline-block;
margin: 0 auto;
}JavaScript代码:
<script>
//获取div
var oDiv = document.getElementsByTagName('div')[0];
var oP = document.getElementsByTagName('p')[0];
// 创建li的个数
var arrImg = ["img/timg (1).jpg","img/timg (2).jpg","img/timg (3).jpg","img/timg (4).jpg","img/timg.jpg"];
var oList = document.getElementById('list');
// 循环arrImg,渲染li
for(var i=0;i<arrImg.length;i++) {
createListImg(arrImg[i]);
}
// 获取oList中的img
var aImg = oList.getElementsByTagName('img');
for(var i=0;i<aImg.length;i++) {
aImg[i].index = i;
aImg[i].onclick = function() {
oP.style.display = "none";
oDiv.style.display = 'block';
if(oDiv.innerHTML.indexOf('img') > 0) {
var oPic = oDiv.getElementsByTagName('img')[0];
oDiv.removeChild(oPic);
createDivImg(arrImg[this.index]);
}else {
createDivImg(arrImg[this.index]);
}
}
}
console.log(aImg);
// 创建oDiv中的img标签
function createDivImg(ImgSrc) {
var oImg = document.createElement('img');
oImg.src = ImgSrc;
oDiv.appendChild(oImg);
}
// 创建oList中的img标签
function createListImg(ImgSrc) {
var oLi = document.createElement('li');
var oImg = document.createElement('img');
oImg.src = ImgSrc;
oLi.appendChild(oImg);
oList.appendChild(oLi);
}
// 上传图片发生改变
function handleFiles(file,obj) {
var oImgSize = document.formx.userfile.files[0].size;
//获取当前点击的元素的所有同级元素的html内容
var con = obj.innerHTML;
//判断当前点击元素内是否已经存在img图片元素,如果有则先全部清除后再添加,如果没有就直接添加
if (con.indexOf("img") > 0) {
//获取obj中的img
var pic = obj.getElementsByTagName("img")[0];
//移除该图片
obj.removeChild(pic);
//调用添加img图片的函数
creatImg();
//div显示
oDiv.style.display = "block";
oP.style.display = "block";
ImgSize();
} else {
creatImg();
oDiv.style.display = "block";
oP.style.display = "block";
ImgSize();
}
function creatImg() {
//创建一个img元素
var img = document.createElement("img");
//设置img元素的源文件路径,window.URL.createObjectURL() 方法会根据传入的参数创建一个指向该参数对象的URL. 这个URL的生命仅存在于它被创建的这个文档里
img.src = window.URL.createObjectURL(file[0]);
//window.URL.revokeObjectURL() 释放一个通过URL.createObjectURL()创建的对象URL,在图片被显示出来后,我们就不再需要再次使用这个URL了,因此必须要在加载后释放它
img.onload = function() {
window.URL.revokeObjectURL(this.src);
}
//在当前点击的input元素的div中添加刚刚创建的img图片元素
obj.appendChild(img);
}
function ImgSize() {
if(oImgSize < 1024*1024) {
oP.style.color = '#000';
oP.innerHTML = Math.floor(oImgSize/1000) +"KB,可以上传";
}else {
oP.style.color = 'red';
oP.innerHTML = "图片大于1M,不可上传";
}
}
}
</script>
HTML代码:
<form action="" name="formx" method="post" enctype="multipart/form-data "> <span>选择文件</span> <input type="file" name="userfile" onchange="handleFiles(this.files,this.nextElementSibling)" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"> <div><p></p></div> <ul id="list"> </ul> </form>
CSS代码:
* {
margin: 0;
padding: 0;
list-style: none;
}
body {
position: relative;
}
span {
display: inline-block;
width : 90px;
height: 35px;
line-height: 35px;
border: 1px solid #ccc;
border-radius: 5px;
text-align: center;
}
input[type="file"] {
width: 100px;
height: 40px;
position: absolute;
top: 0;
left: 0;
z-index: 100;
opacity: 0;
}
div {
width: 200px;
height: 100px;
display: none;
margin: 15px;
position: relative;
}
div img {
width: 100%;
height: 100%;
}
div p {
width: 200px;
position: absolute;
right: -230px;
bottom: 0;
line-height: 35px;
}
ul {
width: 600px;
height: 350px;
}
ul li {
width: 170px;
height: 100px;
float: left;
margin-right: 5px;
margin-bottom: 5px;
}
ul li img {
width:100%;
height:100%;
display: inline-block;
margin: 0 auto;
}JavaScript代码:
<script>
//获取div
var oDiv = document.getElementsByTagName('div')[0];
var oP = document.getElementsByTagName('p')[0];
// 创建li的个数
var arrImg = ["img/timg (1).jpg","img/timg (2).jpg","img/timg (3).jpg","img/timg (4).jpg","img/timg.jpg"];
var oList = document.getElementById('list');
// 循环arrImg,渲染li
for(var i=0;i<arrImg.length;i++) {
createListImg(arrImg[i]);
}
// 获取oList中的img
var aImg = oList.getElementsByTagName('img');
for(var i=0;i<aImg.length;i++) {
aImg[i].index = i;
aImg[i].onclick = function() {
oP.style.display = "none";
oDiv.style.display = 'block';
if(oDiv.innerHTML.indexOf('img') > 0) {
var oPic = oDiv.getElementsByTagName('img')[0];
oDiv.removeChild(oPic);
createDivImg(arrImg[this.index]);
}else {
createDivImg(arrImg[this.index]);
}
}
}
console.log(aImg);
// 创建oDiv中的img标签
function createDivImg(ImgSrc) {
var oImg = document.createElement('img');
oImg.src = ImgSrc;
oDiv.appendChild(oImg);
}
// 创建oList中的img标签
function createListImg(ImgSrc) {
var oLi = document.createElement('li');
var oImg = document.createElement('img');
oImg.src = ImgSrc;
oLi.appendChild(oImg);
oList.appendChild(oLi);
}
// 上传图片发生改变
function handleFiles(file,obj) {
var oImgSize = document.formx.userfile.files[0].size;
//获取当前点击的元素的所有同级元素的html内容
var con = obj.innerHTML;
//判断当前点击元素内是否已经存在img图片元素,如果有则先全部清除后再添加,如果没有就直接添加
if (con.indexOf("img") > 0) {
//获取obj中的img
var pic = obj.getElementsByTagName("img")[0];
//移除该图片
obj.removeChild(pic);
//调用添加img图片的函数
creatImg();
//div显示
oDiv.style.display = "block";
oP.style.display = "block";
ImgSize();
} else {
creatImg();
oDiv.style.display = "block";
oP.style.display = "block";
ImgSize();
}
function creatImg() {
//创建一个img元素
var img = document.createElement("img");
//设置img元素的源文件路径,window.URL.createObjectURL() 方法会根据传入的参数创建一个指向该参数对象的URL. 这个URL的生命仅存在于它被创建的这个文档里
img.src = window.URL.createObjectURL(file[0]);
//window.URL.revokeObjectURL() 释放一个通过URL.createObjectURL()创建的对象URL,在图片被显示出来后,我们就不再需要再次使用这个URL了,因此必须要在加载后释放它
img.onload = function() {
window.URL.revokeObjectURL(this.src);
}
//在当前点击的input元素的div中添加刚刚创建的img图片元素
obj.appendChild(img);
}
function ImgSize() {
if(oImgSize < 1024*1024) {
oP.style.color = '#000';
oP.innerHTML = Math.floor(oImgSize/1000) +"KB,可以上传";
}else {
oP.style.color = 'red';
oP.innerHTML = "图片大于1M,不可上传";
}
}
}
</script>
相关文章推荐
- HTML自定义按钮上传图片并实现预览(同时解决getAsDataURL()弃用问题)
- 怎么简便地去掉html中难看的文件上传按钮并实现图片预览功能?
- 自定义上传图片样式,同时实现多图片的上传和预览
- FileUpload控件实现单按钮图片自动上传并带预览显示
- 图片上传显示进度条和预览图的前端实现之进度条篇
- ASP.NET MVC图片上传前预览简单实现
- 通过修改ajaxFileUpload.js实现多图片动态上传并实现预览
- ThinkPHP5+Layui实现图片上传加预览功能
- 基于jquery实现左右按钮点击的图片切换效果
- jquery实现上传图片及图片大小验证、图片预览效果代码
- 自己写的鼠标单击按钮实现图片切换
- 图片上传前预览js实现[转]
- 一段上传图片预览JS脚本,Input file图片预览的实现
- 【WPF】XAML实现按钮背景图片的点击切换
- 自定义CKeditor图片上传按钮
- js实现图片上传预览
- Flash实现图片上传(实现浏览器端图片预览)
- 使用 StoryBoard 实现左右按钮切换图片的浏览效果
- 自定义View实现图片上传进度显示
- H5实现图片预览、裁剪、批量上传