Javascript图片上传前的本地预览实例


Posted in Javascript onJune 16, 2014

图片的上传预览功能主要用于图片上传前的一个效果的预览,目前主流的方法主要有js,jquery与flash实现,但我们一般都会使用js来实现图片上传预览功能,下面来看一个例子。

原理:

分为两步:当上传图片的input被触发并选择本地图片之后获取要上传的图片这个对象的URL(对象URL);把对象URL赋值给事先写好的img标签的src属性即可把图片显示出来。

在这里,我们需要了解Javascript里File对象、Blob对象和window.URL.createObjectURL()方法。

File对象:

File对象可以用来获取某个文件的信息,还可以用来读取这个文件的内容.通常情况下,File对象是来自用户在一个input元素上选择文件后返回的FileList对象,也可以是来自由拖放操作生成的 DataTransfer对象.
下面来看获取FileList对象:

<script type="text/javascript" src="jquery.js"></script>
<input id="upload" type="file">
<img id="preview" src="">
<script type="text/javascript">
$('#upload').change(function(){
    // 获取FileList的第一个元素
    alert(document.getelementbyid('upload').files[0]);
});
</script>

Blob对象:

一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并不一定得是JavaScript中的原生形式.File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件.
我们想要得到的对象URL实际上就是从Blob这个对象获取的,因为File的接口继承Blob。下面就来把Blob对象转换成URL:

<script type="text/javascript">
var f = document.getelementbyid('upload').files[0];
var src = window.URL.createObjectURL(f);
document.getElementById('preview').src = src;
</script>

兼容性:

上述方法适用于chrome浏览器
如果是IE浏览器可以直接使用input的value来代替src
网上查看资料有直接使用File对象的getAsDataURL()方法获取URL的,现在这个方法都已经废除,类似的还有getAsText()和getAsBinary()方法,我们来看这样一个例子。

function getFullPath(obj) {    //得到图片的完整路径  
    if (obj) {  
//ie  
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {  
    obj.select();  
    return document.selection.createRange().text;  
}  
//firefox  
else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {  
    if (obj.files) {  
return obj.files.item(0).getAsDataURL();  
    }  
    return obj.value;  
}  
return obj.value;  
    }  
}

这段代码是获取客户端图片的完整路径
我们再限制其大小和格式

$("#loadFile").change(function () {  
var strSrc = $("#loadFile").val();  
img = new Image();  
img.src = getFullPath(strSrc);  
//验证上传文件格式是否正确  
var pos = strSrc.lastIndexOf(".");  
var lastname = strSrc.substring(pos, strSrc.length)  
if (lastname.toLowerCase() != ".jpg") {  
    alert("您上传的文件类型为" + lastname + ",图片必须为 JPG 类型");  
    return false;  
}  
//验证上传文件宽高比例  if (img.height / img.width > 1.5 || img.height / img.width < 1.25) {  
    alert("您上传的图片比例超出范围,宽高比应介于1.25-1.5");  
    return;  
}  
//验证上传文件是否超出了大小  
if (img.fileSize / 1024 > 150) {  
    alert("您上传的文件大小超出了150K限制!");  
    return false;  
}

其中,loadFile是html input file的id。在它的change事件,也就是选择了要上传的文件以后,让图片显示在图片框里吗,在上面代码的最后加上以下代码

$("#stuPic").attr("src", getFullPath(this));

既然用到了jQuery,下面我们再分享一个用jQuery的写的代码实例:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery.js"></script>
<script language="javascript">
 $(function(){
        var ei = $("#large");
        ei.hide();
        $("#img1").mousemove(function(e){
                ei.css({top:e.pageY,left:e.pageX}).html('<img style="border:1px solid gray;" src="' + this.src + '" />').show();
        }).mouseout( function(){
                ei.hide("slow");
        })
        $("#f1").change(function(){
                $("#img1").attr("src","file:///"+$("#f1").val());
        })
 });
</script>
<style type="text/css">
        #large{position:absolute;display:none;z-index:999;}
</style>
</head>
<body>
<form name="form1" id="form1">
<div id="demo">
<input id="f1" name="f1" type="file" />
<img id="img1" width="60" height="60">
</div>
<div id="large"></div>
</form>
</body>
</html>
Javascript 相关文章推荐
JS实现可改变列宽的table实例
Jul 02 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
EasyUI在表单提交之前进行验证的实例代码
Jun 24 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
setTimeout学习小结
Feb 08 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
Jun 28 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
从源码看angular/material2 中 dialog模块的实现方法
Oct 18 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
jquery的ajax异步请求接收返回json数据实例
Jun 16 #Javascript
Javascript判断图片尺寸大小实例分析
Jun 16 #Javascript
javascript进行数组追加方法小结
Jun 16 #Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
Jun 16 #Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 #Javascript
js限制文本框只能输入数字方法小结
Jun 16 #Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 #Javascript
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
《与孩子一起学编程》python自测题
2018/05/27 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
大学生最新职业生涯规划书范文
2014/01/12 职场文书
学徒工职责
2014/03/06 职场文书
拉拉队口号
2014/06/16 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
导游词怎么写
2015/02/04 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis
P站美图推荐——变身女主角特辑
2022/03/20 日漫
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android