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实现的仿sohu博客更换页面风格(简单版)
Mar 22 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
使用JavaScript刷新网页的方法
Jun 04 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
详解Angular.js的$q.defer()服务异步处理
Nov 06 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 Javascript
vue-cli3 karma单元测试的实现
Jan 18 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
新闻系毕业生推荐信
2013/11/16 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
市场营销管理制度
2014/01/29 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
社区文化建设方案
2014/05/02 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
全民创业工作总结
2015/08/13 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
干部外出学习心得体会
2016/01/18 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python
Python os和os.path模块详情
2022/04/02 Python
Python加密与解密模块hashlib与hmac
2022/06/05 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python