首先看看 "效果图" :

我们最终实现的就是点击右侧的“相机”按钮添加想要添加的图片然后可以根据需要删除(点叉删除本条)或再次添加图片,并显示缩略图。。。。走起。。。。

首先来一段笔(fei)记(hua):

看着文字理解下面的代码就好多了。。。

1.当input的属性type为file时,此时可以选择文件。
2.在通过文件输入字段选择了一或多个文件时, files集合中将包含一组 File 对象,每个 File 对象对应着一个文件。每个 File 对象都有下列只读属性。
 name :本地文件系统中的文件名。
 size :文件的字节大小。
 type :字符串,文件的 MIME 类型。
 lastModifiedDate :字符串,文件上一次被修改的时间(只有 Chrome 实现了这个属性)
4.capture表示,可以捕获到系统默认的设备,
比如:camera--照相机;camcorder--摄像机;microphone--录音。
accept表示,直接打开系统文件目录。
5.其实html5的input:file标签还支持一个multiple属性,表示可以支持多选

6.window.URL.createObjectURL()和 window.URL.revokeObjectURL()两个DOM方法。这两个方法创建简单的URL字符串对象,用于指向任何 DOM File 对象数据,包括用户电脑中的本地文件。

7.URL对象是 File 对象的一个字符串标识。 每次调用window.URL.createObjectURL()的时候,会创建一个唯一的URL对象,即使你已经为该文件创建了URL对象。这些对象都必须被释放。 当文档被卸载时,它们会自动释放,如果你的页面动态地使用它们,你应该明确地通过调用window.URL.revokeObjectURL()释放它们

代(da)码(jia)如(dou)下(hui):

    <input type="file"  id="fileAPI" value=""/><!--只能选择一个文件-->
<input type="file" id="fileAPI1" multiple value=""/><!--可以选择多个文件-->
<input type="file" accept="image/*" capture="camera"><!--照相机!注:pc端点击有延迟!-->
<input type="file" accept="video/*" capture="camcorder"><!--摄像机!注:pc端点击有延迟!-->
<input type="file" accept="audio/*" capture="microphone"><!--录音!注:pc端点击有延迟!-->

     <script type="text/javascript"> $('#fileAPI1').change(function(){
console.log($('#fileAPI1')[0].files);/*打印选择的文件*/
console.log($('#fileAPI1')[0].files.length)/*打印选择文件个数*/
}) </script>

然后是我点击的是“相机”的按钮,实际上触发的是input的click事件,所以当我们不想用户看到文件路径和难看的上传按钮时我们可以这么做( 用其他按钮的事件触发隐藏的文件输入框的click方法):

/**
* 点击相机按钮触发input的click事件
* @returns
*/
(function addImgA() {
$('#addImg_aInput').on('touchstart',function(e){
e.preventDefault();
$('#addImg_input').click();
});
})();

其实此时input的css是这样子滴(如下图):

我们显示图片缩略图主要是通过图片的URL显示的(上代码):

html代码片段:

<div class='commodityDescription_textarea_div'>
<textarea rows="" cols="" placeholder='写下你的商品评价对别人很有帮助哦!'></textarea>
</div>
<div class='commodityDescription_img_div'> <a href='javascript:;' id='addImg_aInput'><img class='img1' src='../img/paizhao.png' /></a>
<input type="file" accept="image/*" multiple id='addImg_input'> </div>

  js代码如下:

/**
* 通过用户选择的图片文件url 显示缩略图
*/
(function() {
var $imgListWrapper = $('.commodityDescription_img_div');
var $ulImgList = $('<ul></ul>');
var $addImgInput = $('#addImg_input'); $ulImgList.appendTo($imgListWrapper);
$ulImgList.attr('id','ulImgList');
$('#ulImgList').css({
'display':'inline-block',
'width':'80%',
'height':'100%',
'float':'right'
});
$addImgInput.on('change',function(){ var files = $addImgInput[0].files; for(var i=0 ; i<files.length ; i++){
var $ulImgListLi   = $('<li></li>');
var $img = $('<img />');
var $span = $('<span>x</span>')
var imgUrl = window.URL.createObjectURL(files[i]); $ulImgListLi.appendTo($ulImgList);
$img.appendTo($ulImgListLi);
$img.attr('src',imgUrl); $('#ulImgList>li>img').css({
'max-width':'100%',
'display':'inline-block',
'max-height':'90%',
'box-sizing':'border-box',
'vertical-align': 'middle'
});
$('#ulImgList>li').css({
'margin':'2px 2px',
'text-align': 'center',
'position':'relative',
'border':'1px solid #d6d6d6',
'display':'inline-block',
'line-height':'3.125rem',
'vertical-align':'top',
'width':'25%',
'height':'3.125rem',
'box-sizing':'border-box'
});
$span.appendTo($ulImgListLi).css({
'color':'#fff',
'line-height':'1rem',
'border-radius':' 50%',
'top': '-0.5rem',
'position': 'absolute',
'right': '-.2rem',
'background': '#c81e32',
'height': '1rem',
'width': '1rem',
'text-align':' center'
}); //span 点击事件 删除当期图片 防止误触
$ulImgListLi.find('span').on('touchstart',function(){
this.flag = true;
});
$ulImgListLi.find('span').on('touchmove',function(){
this.flag = false;
});
$ulImgListLi.find('span').on('touchend',function(){
if(this.flag){
$(this).parent('li').remove();
}
});
}
}); })();

  js代码大致:1.选择文件后触发change事件 2.得到已选择文件的url 3.遍历赋值给我们的img 4.我们动态的创建相应元素设置相应样式 5.完成;

主要就这些吧,有部分css没有写出来都是些简单的,本人小白一枚,第一次发文,不喜勿喷,还望大家多多帮助相互学习,下面是参考链接,人家写的很好呢。。。

(我就是看这个链接自己写的,也希望大家能学到东西。。886.。。)

参考链接:https://developer.mozilla.org/zh-CN/docs/Using_files_from_web_applications

file-API 实现添加图片 预览缩略图(自己学习)的更多相关文章

  1. input file样式修改,图片预览删除功能

    本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...

  2. 浅谈简单实现file控件的图片预览,裁剪和上传。

    1.图片预览之FileReader对象    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据 ...

  3. JS input file 转base64 JS图片预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. github readme 添加图片预览

    ![img](https://github.com/lanshengzhong/mina_alan/blob/master/screenshot/2.gif) ![图片加载失败的时候就会显示这段话]( ...

  5. input[type="file"]的图片预览

    在项目中遇到用input标签file类型的文件上传,想实在上传之前进行图片的预览功能:之前的做的一个解决方案是文件先上传上去然后返回地址再显示在页面上,这样就不太好,因为用户基本信息可能并没有保存,但 ...

  6. vue-preview vue图片预览插件+缩略图样式

    一.安装 npm i vue-preview -S 二.main.js中  导入组件 //vue-preview 开始 import VuePreview from 'vue-preview'; // ...

  7. 【Js应用实例】图片预览

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. vue.js 图片预览

    Vue.js的图片预览的插件还是不少,但是找了半天还是没找到跟现在项目里能用得很顺手的,其实项目里图片预览功能很简单,点击放大,能双指缩放就可以了.部分vue.js的图片预览库都需要把图片资源单独拿出 ...

  9. JS实现的图片预览功能

    之前的博文有实现过图片上传预览,但那种方法是预览时就将图片上传,会产生很大的浪费空间.找到了之前有人写的用JS实现的图片预览,就说用js将上传的图片显示,上传代码在之前的博文中有写到. 以下是实现的代 ...

随机推荐

  1. [转] DDD领域驱动设计框架分享

    从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven desi ...

  2. 两本最近阅读的工具书的记录 关于Python和Linux命令行的 不喜勿喷 只是写给自己用

    <Linux命令行完全技术宝典>读书心得 张栋作者 在学习Linux系统中,我们需要掌握各种管理的方法和技巧,而管理Linux系统最有效的方法就是命令行的控制.而我在图书馆中读到的< ...

  3. module.exports,exports,export和export default,import与require区别与联系【原创】

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  4. .NET Core程序中使用User Secrets存储敏感数据

    前言 在开发中经常会用到一些敏感数据,比如AppSecret或数据库连接字符串,无论是硬编码还是写在配置文件中,最终都要push到svn或git上.对于开源项目,这些敏感数据就无隐私可言了,对于私有项 ...

  5. 安装gcc提示no acceptable C compiler found in $PATH

    安装gcc提示no acceptable C compiler found in $PATH 从所报错可以看出是缺少了c编译器,因为gcc就是c编译器,所以没有安装gcc就没有c编译器. 之所以报这样 ...

  6. Tp框架获取客户端IP地址

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...

  7. 遇到build的问题

    可以打开C/C++BUILD里面把build直接改成cmd,cmd   path是有的

  8. iOS 手机时区获取问题

     1. 标准的获取时区的正确方法  [NSTimeZone resetSystemTimeZone]; // 重置手机系统的时区 NSInteger offset = [NSTimeZone loca ...

  9. python迭代器生成器(三)

    扩展的列表解析语法 今天接着昨天的继续写. 列表解析可以变得更加复杂---例如,它可以包含嵌套的循环,也可能被编写为一系列的for子句.(这里只是简单介绍一下,以后再说这个语法的问题) 例如:构建一个 ...

  10. 第1章 ssh和SSH服务(包含隧道内容)

    本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...